COMMON LISP JP > Archives > 2009/12/29

2009/12/29 09:55:21 UTCg000001
#
LISP356経由で
#
http://e-arrows.sakura.ne.jp/2009/12/letlisper.html
#
なんですが、Gooのdefって最初のアイデアの時点のArcの
#
代入したらそこからスコープが始まるっていうのを取り込んだのかなあと思いました
#
GooだとSchemeの内部defineみたいなdefがletよりプリミティブで
#
(let ((x 10)) ...) 
=> 
(seq   
 (def x 10))
;seqは、prognとかbeginなどと同じ
#
になります
#
http://people.csail.mit.edu/jrb/goo/manual.46/goomanual_7.html
2009/12/29 10:05:13 UTCshiro
#
letをdefで定義するってのはおもしろいなあ。Schemer的にはletはlambdaのシンタックスシュガーで、内部defineはletrec*のシンタックスシュガーって階層ですね。
2009/12/29 10:05:16 UTCg000001
#
自分はlet大好きなのでネストが苦になったことはないのですが、Gooのdefも便利といえば便利かなと思いました('-'*)
2009/12/29 10:10:35 UTCshiro
#
「ローカル変数の意味」を決めようとした場合、lambdaで説明するのが一番簡単なんじゃないかとは思うのだけれども。まあそれだとグローバルな定義は別扱いになるので結局あんまり綺麗にはならないかなあ。
2009/12/29 10:16:13 UTCg000001
#
ついでに、letの束縛部分のネストですが、Gooだと
#
(seq 
  (def (tup x y) (tup 1 2))
  (list x y))
;=>(1 2)

(let (((tup x y) (tup 1 2)))
  (list x y)) 
;=>(1 2)
#
みたいに書けてほんのすこし読み易いかもしれないです
#
Gooには多値がないのでタプルで代用するみたいです
#
let-valuesみたいにもう一段階かっこがつくとさすがに読み辛いんですが
#
tupという目印があると若干読みやすい気がするような、そうでもないような…
2009/12/29 10:24:18 UTCg000001
#
CLでいうletとmultiple-value-bindの統合というのが、なんとなくDylanっぽいですね
#
ArcとかClojureはletとdestructuring-bindの統合路線で、どっちかというとこちらの方が便利なのかな
2009/12/29 10:28:07 UTCshiro
#
うん、tupだけ特別扱いにするよりは、パターンパッチで統合しちゃった方が綺麗な気はするな。
#
s/パッチ/マッチ/