読者です 読者をやめる 読者になる 読者になる

福岡は今日も雨

情報系大学生のブログ。主に技術,音楽について。

Common Lispとテキストゲーム

Land of Lispの5章の復習。飽きないように作られていて良い。

連想リスト
リスト構造というLispの基本の形に,他の言語でよくある辞書型(Python風)なもの。キーと値が紐付いている形は,Lispではこう書くようで。

(defparameter *nodes* '((living-room (you are in the living-room. a wizard is snoring loudly on the couch))
(garden (you are in a beautiful garden. there is a well in front of you))
(attic (you are in the attic. there is a giant welding torch in the corner))))

簡潔で解りやすい。この連想リストの形から,キーと一緒に抜き出す方法はこちら / 値が取りたい時も書く

(assoc 'garden *nodes*)
; (garden (you are in a beautiful garden. there is a well in front of you))
(cadr (assoc 'garden *nodes*))
; (you are in a beautiful garden. there is a well in front of you)

準クォート
Lispでは,コードモードとデータモードを使い分けることによってコードを実行する。
データモードの時はデータの塊として処理されるのであるが,一部分だけコードを埋め込みたいときがある。そんな時にこれ。

(defun describe-path(edge)
`(there is a ,(caddr edge) going, (cadr edge) from here.))

注意すべきは,[`]であって[']ではないこと。ここでエラーが起きて首をかしげて少し時間をとった。

眠たいので高階関数については明日。