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

回到顶部