私は関数定義make-cd
を持っていて、間違った答えを得るために関数を実行します。(list ...)Lispのvs '(...)
(defun make-cd (title artist rating ripped)
'(:title title :artist artist :rating rating :ripped ripped))
(add-record (make-cd "Roses" "Kathy Mattea" 7 t))
(:TITLE TITLE :ARTIST ARTIST :RATING RATING :RIPPED RIPPED)
正解を得るには、(list ...)
を使用してください。
(defun make-cd (title artist rating ripped)
(list :title title :artist artist :rating rating :ripped ripped))
(add-record (make-cd "Roses" "Kathy Mattea" 7 t))
(:TITLE "Roses" :ARTIST "Kathy Mattea" :RATING 7 :RIPPED T)
なぜですか?
'(X Y Z)'は '(QUOTE(X Y Z))'の省略形です。 ['QUOTE'](http://www.lispworks。com/documentation/HyperSpec/Body/s_quote.htm)は、指定されたオブジェクトを単に評価する代わりにリテラルデータとして返します。つまり、あなたの例の 'TITLE'では' ARTIST'、 'RATING'と' RIPPED'はそれらの名前を持つ変数への参照ではありません。彼らは文字通りのシンボルです。 – jkiiski
これは、 '$ WYSIWYG '// =>'これは$ WYSIWYG 'であり、' "$ WYSIWYG" // => "ではない文字列を補間しない定数文字列の違いと似ています置き換えられない "。 – Sylwester