2005-09-20から1日間の記事一覧

関数を受け取る関数

いわゆるdownward closure、ラムダ式、高階関数、云々。こちらは手続き型言語でも最近のものではもはや当たり前ですね。 >> twice: func [x][x 1 x 2] >> twice func [x][print x] 1 2 なお関数の形を取っていない単なるブロックも、doで実行できます。 >> d…

関数を作る関数

手続き型言語では(template等抜きに)素直に実現するには)スタックポインタの都合で不可能ですが、関数型言語ではとてもおなじみ。カリー化もこの類。 You should avoid using variables that are local to the top level function as an unevaluated part of…

関数定義

functionとfuncとdoesがあります。 >> sign: function [x][r][either x > 0 [r: +1][either x > sign +100 == 1 >> sign -100 == -1 >> sign 0 == 0 >> sign2: func [x][either x > 0 [+1][either x > sign2 +123 == 1 >> sign2 -9999 == -1 >> sign2 0 == 0…

どこからどこまでが引数なのでしょうか

次は関数呼び出し。 括弧が不要ですので、引数がひとつだけのときは順番に係っていくので明白ですが、引数がふたつ以上あるときの係り受けがどうなっているのかは当然の疑問でしょう。 >> join join "abc" "def" "ghi" == "abcdefghi" 簡単に言えば正ポーラ…

1+1…あれ。

1+1をやってみましょう。 >> 1+1 ** Syntax Error: Invalid integer -- 1+1 ** Near: (line 1) 1+1 >> 1 + 1 == 2 演算子もまた識別子扱いですので、空白が必要です。 ならば。 >> ++: :+ >> 1 ++ 1 ** Script Error: ++ expected value2 argument of type: …

なんでもかんでもブロック

Rebolは、Lispが全てS式のように、全てがブロックで、コードもデータも区別がありません。スクリプトファイルも一番外側に [ ] がある扱いだそうです。 ブロックには各種の値と単語が並ぶことになります。 予約語はもちろん存在しません。 単語の扱いは四種…