アフィってみた。
竹内関数(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.
並列計算をやってみると、
[[]]
の中を、コア数同時に計算するみたいだ。
サンプルにはズンドコキヨシのプログラムがあったので、
それを末尾再帰でやってみた。
> "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 はマルチコアに対応した 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. >
今日は in_interval() を書いた。
クラスは、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