关于scheme的quote

scheme很简洁,喜欢用同一种形式来表达不同的概念,比如一部分表达式求值 和一部分数据的表示就采用了同一种形式,所以为了区分到底是表达式求值还是表示数据,quote就登场了。

对于一个identifier,如果它用在expression的地方,那么它就会被当作variable在求值,但是如果在这个地方我们想要用这个identifier本身(即把它作为symbol),抑制它的求值,就需要在identifier之前加上quote( ' ).

对于一个list,如果它用在expression的地方,scheme将会把它作用function的application来求值,如果我们想在这里使用这个list本身,同样需要在它之前加上quote( ' ).

有意思的事,如果一个list被作用数据来使用的时候,里面的子list同时也都作用数据来使用了,也就是说都不再求值了,所以对于一个作为数据使用的list内的identifier来说,只能也被看作为数据(symbol)

几个例子

'name

'(name)

'('name) ;(这个有意思,里面的'name其实也是个list,car是quote,cdr是(name))

你可能感兴趣的:(其他)