common-lisp 条件构造
示例
在Common Lisp中,if是最简单的条件构造。它的形式(if test then [else])和被评估then,如果test是真实的,else否则。其他部分可以省略。
(if (> 3 2)"三个更大!"
"两个更大!")
;;=> "三个更大!"
ifCommon Lisp和if许多其他编程语言之间的一个非常重要的区别是,CLif是表达而不是陈述。因此,if表单返回值可以分配给变量,也可以在参数列表等中使用:
;; Use a different format string depending on the type of x(format t (if (numberp x)
"~x~%"
"~a~%")
x)
if在C#和其他“花括号”语言中,可以将Common Lisp视为等效于三元运算符?:。
例如,以下C#表达式:
year == 1990 ? "Hammertime" : "Not Hammertime"
假定year保存一个整数,它等效于以下Common Lisp代码:
(if (eql year 1990) "Hammertime" "Not Hammertime")
cond是另一个条件构造。它有点类似于一条if语句链,其形式为:
(cond (test-1 consequent-1-1 consequent-2-1 ...)(test-2)
(test-3 consequent-3-1 ...)
... )
更确切地说,cond具有零个或多个子句,并且每个子句都有一个测试,后跟零个或多个结果。整个cond构造选择测试不评估的第一个子句,nil并按顺序评估其结果。它返回结果中最后一个表单的值。
(cond ((> 3 4) "三个大于四个!")((> 3 3) "三个大于三个!")
((> 3 2) "三个大于两个!")
((> 3 1) "三大于一!"))
;;=> "三个大于两个!"
要提供默认子句以评估是否没有其他子句求和t,您可以使用添加默认情况下为true的子句t。这在概念上与SQL非常相似CASE...ELSE,但是它使用文字布尔值true而不是关键字来完成任务。
(cond((= n 1) "N equals 1")
(t "N doesn't equal 1")
)
一个if结构可以写成一个cond结构。(if test then else)和(cond (test then) (t else))等价。
如果只需要一个子句,请使用when或unless:
(when (> 3 4)"三大于四。")
;;=> NIL
(when (< 2 5)
"二小于五。")
;;=> "二小于五。"
(unless (> 3 4)
"三大于四。")
;;=> "三大于四。"
(unless (< 2 5)
"二小于五。")
;;=> NIL
以上是 common-lisp 条件构造 的全部内容, 来源链接: utcz.com/z/347072.html