4

'ラケットのサインの意味がちょっとわかりません。私には、同じ記号が異なる意味を持っているように見えます。以下の 2 つの簡単な例を見てください。

list

vs を要素として含む、新しく割り当てられたリストを返します。

> (list 1 2 3 4)
'(1 2 3 4)

quote

字句情報、ソースの場所などを除いて、データ(つまり、プログラム フラグメントの表現) に対応する定数値を生成します。引用符で囲まれたペア、ベクトル、およびボックスは不変です。

> '(1 2 3 4)
'(1 2 3 4)

だから私の質問は次のとおりです:'記号には2つの意味(記号リスト)がありますか、それとも同じデータ型でlist実際に引用符で囲まれた定数値を返しますか? 2番目の場合、なぜこれが機能するのですか:

> '(+ (- 2 13) 11)
'(+ (- 2 13) 11)

> (eval (list + (- 2 13) 11))
0

(また(eval '(+ (- 2 13) 11)) 、動作し、正しく評価され0ます)

しかし、これはしません:

> (list + (- 2 13) 11)
'(#<procedure:+> -11 11)

> (eval '(#<procedure:+> -11 11))
. read: bad syntax `#<'

おそらく関連: Lisp/Scheme の ' (アポストロフィ) とは?

4

2 に答える 2

7

#lang racket他のほとんどすべての対話型 Lisp 環境とは異なる、値を出力するデフォルトの方法に戸惑います。DrRacket 自体で別の言語、たとえば R5RS を選択すると、次のように表示されることがわかります。

> (list 1 2 3 4)
(1 2 3 4)

つまり、数値 1 2 3 4 に演算子 listを適用した結果、これらの数値のリストが生成されます。これは、 の解釈とまったく同じです(1 2 3 4)

では、Lisp/Scheme の ' (アポストロフィー) とは何ですか?の答え は? はあなたの場合にも有効であり、 の'anything単なる省略形です(quote anything)

于 2015-11-18T12:30:31.433 に答える