在LispWorks中进行编程05:表达式
Category:UI界面编写表达式
让我们更仔细地看一下表情。
在Lisp中,+是一个过程,像(+ 2 3)这样的表达式是一个过程调用。当Lisp评估过程调用时,它执行以下两个步骤:
- 它从左到右评估参数。在这种情况下,参数只是数字2和3,并且这些参数对自己进行评估。
- 参数的值传递给过程,在本例中为+,返回5。
让我们看一个更复杂的例子:( /( – 7 1)( – 4 2))。顺序是:
- 评估( – 7 1)给出6
- 评估( – 4 2)给2
- 评估(/ 6 2)给出3
- 返回3
防止评估:引用
几乎所有运算符都表现得像这样,但是有些特殊运算符的行为方式不同。一个是引用。尝试
CL-USER > (quote (+ 2 3))
(+ 2 3)
该报价运营商不评价它的参数-它简单地返回。它允许您告诉Lisp将表达式视为数据,而不是要评估的内容。
为方便起见,您可以将(引用某些内容)缩写为“某些内容”。尝试:
CL-USER > ‘(+ 2 3)(+ 2 3)
在“运营商允许你保护评估的表达式。现在尝试引用其中一个参数,如:
CL-USER > (list ‘(* 1 2) (* 3 4))((* 1 2) 12)
引用停止了第一个参数被评估。
评估表达式:eval
引用的反面是eval ; 它评估作为参数传递的表达式。所以:
CL-USER > (eval ‘(+ 2 3))5
对自己进行评估的事情
一个数字评估自己,所以你不需要引用它:
CL-USER > 1212
同样是nil,或者是空列表,两者都评为nil:
CL-USER > ()NIL
行使
1.预测以下Lisp表达式将给出的内容,然后通过评估它们来检查您的答案:
(list (list 2 3) (list 4 5))
(list ‘(list 2 3) ‘(list 4 5))
‘(list (list 2 3) (list 4 5))
http://mip.i3geek.com