在LispWorks中进行编程05:表达式

  • 0

在LispWorks中进行编程05:表达式

Category:UI界面编写 Tags : 

表达式

让我们更仔细地看一下表情。

在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))


Leave a Reply

搜索

分类目录

公 告

本网站学习论坛:

www.zhlisp.com

lisp中文学习源码:

https://github.com/zhlisp/

欢迎大家来到本站,请积极评论发言;

加QQ群学习交流。