2
A
回答
7
首先将通过列表(+ 1 2)
,这类似于你会得到什么,如果你写(cons '+ (cons 1 (cons 2 nil))
,到eval
功能,然后将评估该表达式,并产生答案,3.表达'(+ 1 2)
一种方法引用表达式,以便表达式可以作为数据字面传递,而不是立即进行评估。将它传递给eval
函数将对其进行评估。
第二将评估表达式(+ 1 2)
得到结果3
,然后将其传递给eval
功能。一些评估本身,所以它会返回相同的答案,因为第一种情况下,3
3
看来 (EVAL(+ 1 2))将首先计算(+ 1 2),然后使用(EVAL 3)
(EVAL“(+ 1 2))将转移表达( + 1 2)来评估,并让eval来解释它。
1
所有功能(除了原语和一些特殊功能)喜欢的eval首先评估自己的所有参数,然后通过他们自己的函数体内。
然而,我们可以引述他们抑制参数评价。在这种情况下,S表达式本身作为参数传递,而不是先评估它。
(EVAL(+ 1 2))=>首先(+ 1 2)获取评估=>(EVAL 3)=>这给出答案3
(EVAL“(+ 1 2))=>报价防止从论点得到评价=>(+ 1 2)作为参数=>然而评估该S-表达导致被传递也是3.
的差别可以理解从下面的示例更好:
(EVAL (利弊(+ 1 2)(+ 3 4)))=>这成为(EVAL(3 7))=>这给出错误 “3不是一个函数” 为S-表达要被评估(3 7 )
(EVAL“(利弊(+ 1 2)(+ 3 4)))=>此变得像输入(利弊(+ 1 2)(+ 3 4))上REPL的这个=>评价为S表达产生结果(3.7)
相关问题
- 1. 为什么在clojure(eval(list + 1 2))和(eval(list'+ 1 2))做同样的事情?
- 2. 内核#eval和Binding#eval之间的区别红宝石
- 3. window []和eval()之间的区别 - Javascript
- 4. 如何评估eval()内的console.log(1 + 2)?
- 5. lisp中'((1 2)(3 4))和'('(1 2)'(3 4))之间的区别是什么?
- 6. d.update(dict(a = 1,b = 2))和d.update(dict('a'= 1,'b'= 2)之间有什么区别)
- 7. “?1”和“?”之间的区别
- 8. Rails 1.X和2.X之间的主要区别是什么
- 9. '2>&1'和'&>文件名'之间的区别
- 10. android 1.x和2.x之间的主要区别
- 11. Angular 1.X和2.X之间的区别是什么
- 12. Selenium Grid版本1和2之间的区别
- 13. Spark 1.x和2.x中各种sparkcontext之间的区别
- 14. Object,Object和[1:Object,2:Object]之间有什么区别?
- 15. Magento :: soap API版本1和2之间有什么区别?
- 16. .htaccess中$ 1 vs%1之间的区别
- 17. Struts 1和Struts 2的区别?
- 18. webpack 1和webpack 2有什么区别?
- 19. tp(,)和tpo之间的区别(1)()
- 20. TimerTask和Executors.newScheduledThreadPool之间的区别(1)
- 21. srand(1)和srand(0)之间的区别
- 22. ASP.NET MVC 1和3之间的区别
- 23. .MakeArrayType()和.MakeArrayType(1)之间的区别
- 24. Javascript:Forloop i ++和(i + 1)之间的区别
- 25. “$ | ++”和“$ | = 1”之间的区别是什么
- 26. Python是什么EVAL之间的区别和int
- 27. Apache 1和Apache 2之间的差异
- 28. javascript中的a + 1和a - 1 +2有什么区别
- 29. 如何生成-1/2到1/2之间的随机值
- 30. emacs --eval'(ediff“$ 1”“$ 2”)'如何将此行放入shell脚本中?