以下妄想です。 特殊構文†引数は事前に評価(括弧展開)されない。 when†外部関数ifと同等。 仕様†
例†*さんぷる1 :ifの場合 (set、変数1、0)(set、変数2、0) (if、1、(set、変数1、1)、(set、変数2、1)) 変数1は(変数1)#=>1 変数2は(変数2)#=>1 :whenの場合 (set、変数1、0)(set、変数2、0) (when、1、(set、変数1、1)、(set、変数2、1)) 変数1は(変数1)#=>1 変数2は(変数2)#=>0 *さんぷる2 :10の階乗は(call、階乗、10)です。 @階乗 (when、(calc、1<(A0))、 (calc、(A0)*(call、階乗、(calc、(A0)-1)))、 1) times†回数を指定したループ。 loopと違って、引数の括弧は事前に展開されない。 ループ本体はラベルとして呼び出されずに直接評価される。 ラベルは括弧やcallで明示的に呼び出す必要があるので注意。 また、loopとは引数の順番が違うので注意。 (ループ本体が大きくなると予想されるため入れ替えた) 仕様†
例†*さんぷる1 ピザって10回言って。\w9 :(times、10、ピザφ、\w2) :ここは?\w9 :・・・\w5埼玉。 *さんぷる2 :(times、9、1、(C0)+)10は?\w9 :・・・(call、級数、10)! @級数 (when、(calc、1<(A0))、 (calc、(A0)+(call、級数、(calc、(A0)-1)))、 1) *さんぷる3 :点呼! (times、3、1、(times、3、1、(call、点呼))) *点呼 (C1)年(C0)組、そろいました。 while†条件式によるループ。 仕様†
例†*さんぷる1 素数を数えるんだ!\w9 :1、(call、素数、100) :……1は素数じゃないよ。 @素数 (while、(C0)<=(A0)、2、 (set、約数、0) (while、(C0)<(C1)、2、 (when、(C1)%(C0)==0、 (set、約数、1))) (when、(約数)==0、(C0)φ、)) for†内部関数loopと同様。ただし、ループ本体はラベルとして呼び出されない。 仕様†
例†*さんぷる1 高速に素数を数えるんだ!\w9 :(call、素数、100) :……しかしオーダーは変わらないという……。 @素数 2、3、φ (for、5、(A0)、2、 (set、約数、0) (for、3、(C1)-1、2、 (when、(C1)%(C0)==0、 (set、約数、1))) (when、(約数)==0、(C0)φ、)) |