Tue, 06 Oct 2009

Alabica: 構文

大分空いてしまったけど自分用のメモなので忘れきる前にやったとこまで書きたいと思います。

書いてて思うけど、用語がちゃんと決まってないのでなんかふわふわしてるな。

前回、制御構文は前に出す方針だと書きましたが、具体的には下記のものを前に出しました。

  • 条件構文

    if/when/unless

  • ループ構文

    while/each/for

  • 関数、マクロ定義

    def/defmacro


  • if/when/unless
    • bool if [trueの時実行される] [falseの時実行される]
    • bool when [trueの時実行される]
    • bool unless [falseの時実行される]
>>> true if ["ok"] ["ng"] print
ok
  • while/each/for
    • bool while []
    • list each []
    • 開始 終了 間隔 for []
>>> true while ["loop" print]
loop
loop
 …

このままだと無限ループになるので条件文等で脱出する必要があります。

breakコマンドはありません。

whileは常にスタック先頭の値を評価するので、ループを終了したい時にはスタックにfalseを積みます。 >>> true while ["loop" print false] loop

とすると一回で終了です。 listは初めてでてきましたが、Pythonのリストと同じで、実はquoteと同じものです。

>>> [1 3 5] each [print]
1
3
5

eachはリストの要素を順にスタックに積んで行きます。

>>> [1 3 5] each [as $i $i 10 + print]
11
13
15

みたいに変数に受けて使うこともできます。

forは開始、終了、間隔を指定し、順にスタックに積んで行きます。

>>> 5 10 2 for [print]
5
7
9

今日はここまで。関数の話が残っちゃったけど、次回に廻しします。