在LispWorks中进行编程11:测试结果
Category:UI界面编写测试结果
编写程序的一个重要工具是能够根据计算结果执行不同的操作。
首先,我们需要介绍一些用于测试表达式值的函数。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