fer*_*tor 2 scheme functional-programming racket
我'对球拍中的标志的含义有点困惑.在我看来,同一个标志有不同的含义.请看下面的两个简单示例:
返回包含vs作为其元素的新分配列表.
> (list 1 2 3 4)
'(1 2 3 4)
Run Code Online (Sandbox Code Playgroud)
生成对应于数据的常量值(即,程序片段的表示),而不包含其词汇信息,源位置等.引用的对,向量和框是不可变的.
> '(1 2 3 4)
'(1 2 3 4)
Run Code Online (Sandbox Code Playgroud)
所以我的问题是:'符号是否有2个含义(符号和列表)或这些是相同的数据类型并list实际返回引用的常量值?如果第二种情况是这样的话:
> '(+ (- 2 13) 11)
'(+ (- 2 13) 11)
> (eval (list + (- 2 13) 11))
0
Run Code Online (Sandbox Code Playgroud)
(也(eval '(+ (- 2 13) 11)) 正常工作和评估0)
但这不是:
> (list + (- 2 13) 11)
'(#<procedure:+> -11 11)
> (eval '(#<procedure:+> -11 11))
. read: bad syntax `#<'
Run Code Online (Sandbox Code Playgroud)
相关可能: Lisp/Scheme中的'(撇号)是什么?
您#lang racket对打印值的默认方式感到困惑,这与几乎所有其他交互式lisp环境不同.如果您在DrRacket中选择另一种语言,例如R5RS,您会发现它打印出来:
> (list 1 2 3 4)
(1 2 3 4)
Run Code Online (Sandbox Code Playgroud)
也就是说,运算符 list应用于数字1 2 3 4的结果是产生这些数字的列表,这正是对它的解释(1 2 3 4).
那么,Lisp/Scheme中什么是'(撇号)的答案
?也适用于您的情况,并且'anything只是缩写(quote anything).