我有使用成员函数的条件:
(cond ((member '1' (some-function)) (display #t)) (else (display #f)))
它工作正常,但我仍然找不到答案:
1)'1'的类型是什么?
2)我有下一个表达式
(lambda(x)(= x 1))
如何转换为相同类型的“1”?
答案 0 :(得分:5)
请注意cond
表达式没有按照您的想法进行。真正发生的是:
(cond ((member '1 '(some-function))
(display #t))
(else
(display #f)))
换句话说:引用了数字1
,并且表达式'(some-function)
被解释为单个元素列表,其中符号some-function
是其唯一成员。关于第一个问题,这个表达式:
'1'
...在Scheme中无效 - 尝试在评估窗口中输入它,不会发生任何事情:第一个引用适用于数字1
,第二个引用需要进一步输入,所以任何事情都是如此写完之后会被引用。 FYI双引号表示字符串,与许多其他语言一样:"1"
。但单引用表示引用的表达式,该表达式对其自身进行求值:
'1
=> 1
它只是简写:
(quote 1)
=> 1
在上面的表达式中不需要,一个数字已经评估为自己:
1
=> 1
现在,关于第二个问题,它没有意义,因为'1'
不是一种类型,如上所述。
答案 1 :(得分:4)
'x
与(quote x)
相同。 Scheme不会评估参数,因此它基本上是如何执行常量值的。这不是一个单引号,而是你的示例中引用的列表中有两个元素,如下所示:
(cond ((member '1 '(some-function)) (display #t)) (else (display #f)))
你永远不需要引用一个数字,因为它总是被评估为自己。 '1
与1