関数定義
functionとfuncとdoesがあります。
>> sign: function [x][r][either x > 0 [r: +1][either x < 0 [r: -1][r: 0] ] r] ; rがローカル変数 >> sign +100 == 1 >> sign -100 == -1 >> sign 0 == 0 >> sign2: func [x][either x > 0 [+1][either x < 0 [-1][0] ] ] ; 最後の値が返される >> sign2 +123 == 1 >> sign2 -9999 == -1 >> sign2 0 == 0 >> new-line: does [print ""] ; 引数もローカル変数も無し >> print "A" new-line print "B" A B
名前の解決は「データを実行している」ので当然動的スコープかと思いきや。
>> px: does [print x] >> test: function [][x][x: 20 px] >> x: 10 test 10 >> x: 20 px 20
レキシカルスコープ!?
どうやらコンテキストが定義された時点でスコープが結び付けられるようで、マニュアルはdefinitionalスコープと呼んでいました。