在LispWorks中进行编程11:测试结果

  • 0

在LispWorks中进行编程11:测试结果

Category:UI界面编写 Tags : 

测试结果

编写程序的一个重要工具是能够根据计算结果执行不同的操作。

首先,我们需要介绍一些用于测试表达式值的函数。Lisp包含许多给出真或假答案的函数 – 它们被称为谓词,并且通常(但不总是)具有以p结尾的名称。

在Lisp中,惯例是nil,或空列表,意味着错误,其他任何意味着都是真的。如果要表示true,请使用特殊的Lisp运算符t

测试Lisp对象:eq

最基本的Lisp测试是eq ; 它测试两个Lisp对象是否相同。例如:

CL-USER > (eq ‘fred ‘fred)TCL-USER > (eq ‘fred ‘jim)NIL

测试数字:=><

有几种测试数字的功能。例如=测试两个或更多个数字是否相等:

CL-USER > (= 2 2)
TCL-USER > (= 2 3)
NIL

同样,>测试第一个数字是否大于第二个数字:

CL-USER > (> 4 3)
T

请记住,Lisp使用前缀表示法,因此该函数首先出现。在正常的数学符号中,这意味着4> 3。

CL-USER > (> 3 3)
NIL

该  EQ  测试,也可用于数字,但它更直观的使用=。

数字是偶数还是奇数:evenp,oddp

您可以使用evenp和oddp测试数字是偶数还是奇数。例如:

CL-USER > (evenp 17)
NILCL-USER > (oddp 17)
T

测试字符串是否相等:string =

不需要太多解释:

CL-USER > (string= “cat” “cat”)
T

CL-USER > (string= “cat” “dog”)
NIL

是一个数字吗?numberp

您可以使用numberp测试某些内容是否为数字。所以:

CL-USER > (numberp 2)T CL-USER > (numberp ‘(1 2 3))NIL

列表是什么?listp

您可以使用listp测试某些内容是否为列表。例如:

CL-USER > (listp ‘(1 2 3))TCL-USER > (listp 1)
NIL

请注意,因为nil等同于空列表,所以它严格来说是一个列表:

CL-USER > (listp nil)
T

但请注意:

CL-USER > (listp (+ 1 2))
NIL

因为(+ 1 2)是3,数字不是列表。所以:

CL-USER > (numberp (+ 1 2))
T

测试nil:null

如果参数为nil,则谓词函数null返回t,否则返回nil。请记住,nil评估自己,所以:

CL-USER > (null nil)
TCL-USER > (null t)
NIL

条件测试:如果

现在我们准备使用这些过程根据表达式的值执行不同的操作。Lisp包含了几种不同的形式,但最简单的是if

表单  if  有三个参数。它评估第一个参数; 如果它返回非零值,则计算并返回第二个参数; 否则它会计算并返回第三个参数。

这是一个例子:

(if (evenp a)
(print “Answer is even”)
(print “Answer is odd”))

这将根据a是偶数还是奇数打印两个字符串中的一个。

这是if的应用程序,   最多可以找到两个数字:

(defun maximum (a b)  (if (> a b)      a    b))

结合测试:和,或者不是

您可以使用过程和/或组合多个测试。

或者可以采取任何数量的参数,只返回如果所有的参数计算结果为 ; 否则返回牛逼

  可以采取任何数量的参数,并且仅返回Ť如果所有参数计算为Ť ; 否则它返回  

  接受一个参数,如果参数的计算结果为nil则返回T ; 否则它返回  

例如,要测试某人是否是青少年:

(defun teenager (age)  (if (and (> age 12) (< age 20))    “Teenager”  “Not teenager”))

分组程序:预后

如果表单只允许你给如果测试是真的,一个如果测试是假执行的一个参数。如果你想在其中一种或两种情况下做两件事,会发生什么?

progn这个形式是对这项有益的。它允许您将多个过程包装到一个括号列表中。

(if (evenp a)  (progn (print “Answer is even”) 0)  (progn (print “Answer is odd”) 1))

行使

1.测试弦是否是回文

写一个程序回文?测试一个字符串是否是回文。

检查:

(palindrome? “madam”)

给T.

2.测试对象是否是两个数字的列表

写一个程序号码对?如果它的参数是两个数字的列表,如(2 3),则返回T,否则返回nil

检查:

(numberpair? ‘(45 67))

是T,并且:

(numberpair? ‘(“cat” “dog”))

3.写一个piglatin翻译器

改进Strings中piglatin程序   以应对以元音开头的单词。规则是,如果单词以元音开头,则在末尾添加“way”,例如:

“猪”成为“igpay”

“蚂蚁”变成“蚂蚁”

http://mip.i3geek.com

Leave a Reply

搜索

分类目录

公 告

本网站学习论坛:

www.zhlisp.com

lisp中文学习源码:

https://github.com/zhlisp/

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

加QQ群学习交流。