5

私は LISP を学ぼうとしており、次のコードに似たコード例を使用していました。

(リスト '引用 5)

これは、REPL で '5 に評価されます。('5) または (quote 5) と評価されると予想しました

CLISP REPL でこれを試しています。

どんな助けでも大歓迎です。

4

1 に答える 1

6

read-evaluate-print ループは、最初に読み取り、次に評価します

'quote は「QUOTE という名前のシンボル」と読みます

5は「数字の5」と読みます

したがって、 (list 'quote 5) は、「名前が QUOTE で、2 番目の要素が 5 であるシンボルを最初の要素とするリストを作成する」と評価されます。

この評価結果は「(引用5)」と書ける。"'5" はこれを別の言い方で表したもので、一部の (おそらくほとんどの) Lisp 実装のプリンターは、長い形式ではなく短い形式を印刷することを選択します。

repl を入力してこのようなことを学んでいる場合、読み取りと評価の 2 つのステップは別個のものであることを覚えておく必要がありますが、ループは両方を行っていることを覚えておいてください。

試す

* (read-from-string "(list 'quote 5)")
(LIST 'QUOTE 5)

一度に 1 ステップずつ実行するか、

* (first (read-from-string "(quote 5)"))
QUOTE
* (second (read-from-string "(quote 5)"))
5
* (read-from-string "(quote 5)")
'5

"(引用 5)" と "'5" は同じものだと自分に言い聞かせる

于 2010-11-19T16:41:51.830 に答える