コラッツ予想がとけたらいいな2

自分の考察を書いていきます。

Paraphrase をやってみた その3(アッカーマン関数)

竹内関数(tarai)でやってたけど、速すぎてあれだったので、
アッカーマン関数にした。


"ack" : // ( m n -- result )
  ( m n ) local-with
  `m , 0? if `n , 1 +
  else
    `n , 0? if `m , 1 - 1 ack
    else
      `m , 1 - `m , `n , 1 - ack ack
    then
  then
;

"par" :
  [[ 3 4 ack >pipe ]]
  while-pipe
    .
  repeat
;


 > "ackermann.pp" load
 ok.
 > par
 125 125 125 125 125 125 125 125 125 125 125 125 ok.


並列計算をやってみると、
[[]]の中を、コア数同時に計算するみたいだ。




Paraphrase をやってみた その2(ズンドコ)

サンプルにはズンドコキヨシのプログラムがあったので、
それを末尾再帰でやってみた。


 > "zdkRec.pp" load
 ok.
 > zdk
 Doko Zun Doko Doko Doko Doko Zun Zun Zun Doko Doko Zun Doko Zun Doko Zun Doko Zun Doko Doko Zun Zun Doko Doko Doko Zun Zun Doko Zun Zun Doko Zun Doko Zun Zun Doko Zun Zun Zun Zun Zun Doko Ki-Yo-Shi!!
 ok.




Paraphrase をやってみた

Paraphrase はマルチコアに対応した Forth 系言語とのことだ。
並列処理が簡単に書けるらしい。


起動の依存関係で手間取った。環境は Linux(Ubuntu) だ。
http://archive.ubuntu.com/ubuntu/pool/main/b/boost1.65.1/libboost-program-options1.65.1_1.65.1+dfsg-0ubuntu5_amd64.deb http://archive.ubuntu.com/ubuntu/pool/main/b/boost1.65.1/libboost-chrono1.65.1_1.65.1+dfsg-0ubuntu5_amd64.deb http://archive.ubuntu.com/ubuntu/pool/universe/b/boost1.65.1/libboost-timer1.65.1_1.65.1+dfsg-0ubuntu5_amd64.deb
を入れることで起動できた。

おためし

色々なタイプのデータをスタックに積める。

 > true 1 ( 2 3 ) "ahaha"
 ok.
 > show
      +--------------+   
TOS-->| string ahaha |   
      | list ( 2 3 ) |   
      |    int 1     |   
      |  bool true   |   
DS:----------------------
 ok.
 > 




Forth をやってみた その3(オブジェクト指向)

クラスは、2段構えで作るようだ。

s" oop.f" included 
/snap/gforth/15/share/gforth/0.7.9_20201105/objects.fs:416:30: warning: redefined catch
/share/gforth/0.7.9_20201105/kernel/basics.fs:240:7: warning: original location
oop.f:12:15: warning: redefined cr
/share/gforth/0.7.9_20201105/kernel/io.fs:80:9: warning: original location ok
3 4 foo 
*the terminal*:2:5: error: Invalid memory address
3 4 >>>foo<<< ( 直接 foo は使えない )
Backtrace:
/snap/gforth/15/share/gforth/0.7.9_20201105/objects.fs:148:39:  0 $7F7B5AE5CA28 @ 

7 myCls heap-new constant myObj  ok ( インスタンスを作る )
100 myObj hoge  ok 1                ( メソッドを呼ぶ )
. 107  ok                           ( 確認 )

17 myObj setCr  ok
100 myObj hoge  ok 1
. 117  ok