Arcを使ってみる
ArcのベースではMzScheme(v352)を使ってるようだ。
まずはdefと=の関係を試す
arc> (def func (a) (+ 1 a)) #<procedure: func> arc> (func 1) 2 arc> (= func '(1 2 3)) (1 2 3) arc> func (1 2 3) arc> (func 1) 2 arc> func (1 2 3) arc>
名前空間は分けられる風ではあるのだが、そうでもない。単一の名前空間。ブクマコメでのyharaさんの指摘のとおり、二つ目の(func 1)は、('(1 2 3) 1) => 2になっていたようです。
つづけてfuncに関数を代入すると、
arc> (= func (fn (a) (+ 10 a))) #<procedure: func> arc> (func 2) 12
とdefで定義した関数が呼び出せなくなってしまう。
マクロ定義はCommon LISP風
(mac n-of (n expr) (w/uniq ga `(let ,ga nil (repeat ,n (push ,expr ,ga)) (rev ,ga))))
あとループがあったり、booleanがtとnilになっているとかCommon LISPっぽい部分が多い。
感想としては、「かなりLISPぽいプログラミングができるScheme」というかんじかなあ。
arc> (w/uniq ga ga) gs1429
arc> (coerce 'a 'string) "a" arc> (coerce "a" 'sym) a arc>
ベースのPLT Schemeにはこういう話もあるんで逆を進むような感もあるけれど。