2016-08-21 31 views
0
> (procedure? +) 
#t 
> (procedure? (car '(+ 2 3))) 
#f 
> (list? '(+ 2 3)) 
#t 
> (symbol? (car '(+ 2 3))) 
#t 
> (define someList (list + 2 3)) 

> someList 

> '(#< procedure:+ > 2 3) 

> (procedure? (car someList)) 
#t 
> 

使用引号时,是否有可能被识别为过程?关于计划中的报价

+1

编号''+'是一个符号,因为引用会阻止评估符号。 – uselpa

+0

[引用和列表有什么区别?]可能的重复(http://stackoverflow.com/questions/34984552/what-is-the-difference-between-quote-and-list) –

回答

1

列表,矢量,符号,字符串,布尔值和数字具有字面表示的优点,而程序不具有字面表示。有人可能会争辩说,由于可以在宏观扩展时确定全局变量,甚至全局模块绑定的文字表示形式是可行的,但是由于我们不是最好的方式来做你想要的就是使用quasiquote来评估一些地方:

`(,+ 1 2 3) ; ==> (#<procedure:+> 1 2 3) 

注意评估+了什么都没有与符号+相关这份名单。也知道符号+是数据,不要与变量+混淆。