我有使用成员函数的条件:
(cond ((member '1' (some-function)) (display #t)) (else (display #f)))
Run Code Online (Sandbox Code Playgroud)
它工作正常,但我仍然找不到答案:
1)'1'的类型是什么?
2)我有下一个表达式
(lambda(x)(= x 1))
我怎样才能转换为相同类型的'1'?
请注意,cond
表达式没有按照您的想法进行.真正发生的是这个:
(cond ((member '1 '(some-function))
(display #t))
(else
(display #f)))
Run Code Online (Sandbox Code Playgroud)
换句话说:数字1
被引用,表达式'(some-function)
被解释为单个元素列表,其中符号some-function
作为其唯一成员.关于第一个问题,这个表达式:
'1'
Run Code Online (Sandbox Code Playgroud)
...在Scheme中无效 - 尝试在评估窗口中键入它,不会发生任何事情:第一个引用适用于数字1
,第二个引用期望进一步输入,因此在它之后写的任何内容都将被引用.FYI双引号表示字符串,与许多其他语言一样:"1"
.但是单个引号表示引用的表达式,它对自身进行求值:
'1
=> 1
Run Code Online (Sandbox Code Playgroud)
它只是简写:
(quote 1)
=> 1
Run Code Online (Sandbox Code Playgroud)
在上面的表达式中没有必要,一个数字已经评估为自己:
1
=> 1
Run Code Online (Sandbox Code Playgroud)
现在,关于第二个问题,它没有意义,因为'1'
它不是一种类型,如上所述.