mokeheheのScheme日記

ツッコミ、添削大歓迎です。いろいろ教えてください。

2008-01-05

Lispのリーダー

バッククォートとかカンマとかカンマアットとか、Lispのリーダーでどうやって処理してるんだろう?xyzzyでテスト:

(setf a 1234)
(setf ls '(1 2 3))

としておいて、展開形は

`(hello ,a)          ;=> (hello 1234)
`(hello ,a world)    ;=> (hello 1234 world)
`(hello ,ls world)   ;=> (hello (1 2 3) world)
`(hello ,@ls world)  ;=> (hello 1 2 3 world)

クォートをつけて、展開される前はどんなかをみると

'`(hello ,a)         ;=> (list 'hello a)
'`(hello ,a world)   ;=> (list* 'hello a '(world))
'`(hello ,ls world)  ;=> (list* 'hello ls '(world))
'`(hello ,@ls world) ;=> (cons 'hello (append ls '(world)))

うへぇ、場合分け多いな。

ryos36ryos362008/01/06 10:44えらい勢いで読んでますね。すばらしい。私は CH3, CH23,CH24,ch26 を斜め読み程度。う~ん。

mokehehemokehehe2008/01/06 12:43英文をかなり適当に読み飛ばしてますからね。
Peter Seibel氏の英文がわかりやすく、説明がうまいですね。
ryos36 さんはSchemeやLispをすでにご存知のようですので、
この本では簡単すぎるのではないですか? (^^;;

トラックバック - http://sicp.g.hatena.ne.jp/mokehehe/20080105