Lisp - Cond 结构



LISP 中的cond结构最常用于实现分支。

cond的语法为:

(cond   (test1    action1)
   (test2    action2)
   ...
   (testn   actionn))

cond语句中的每个子句都包含一个条件测试和一个要执行的动作。

如果cond之后第一个测试test1评估结果为真,则执行相关的动作部分action1,返回其值,并跳过其余子句。

如果test1评估结果为nil,则控制流移动到第二个子句,而无需执行action1,并遵循相同的过程。

如果所有测试条件的评估结果均为假,则cond语句返回nil。

示例

创建名为main.lisp的源代码文件,并在其中键入以下代码。这里我们使用带有失败条件的cond结构。

main.lisp

; set a as 10
(setq a 10)
; check a being greater than 20
(cond ((> a 20)
   (format t "~% a is greater than 20"))  ; statement is not printed as case is not true
   (t (format t "~% value of a is ~d " a))) ; otherwise print the statement

单击“执行”按钮或键入Ctrl+E时,LISP会立即执行它,返回的结果为:

value of a is 10

请注意,第二个子句中的t确保如果其他子句都不满足,则执行最后一个动作。

示例

更新名为main.lisp的源代码文件,并在其中键入以下代码。这里我们使用带有成功条件的cond结构。

main.lisp

; set a as 30
(setq a 30)
; check a being greater than 20
(cond ((> a 20)
   (format t "~% a is greater than 20")) ;  statement is printed as case is true
   (t (format t "~% value of a is ~d " a))) ; statement is not printed

单击“执行”按钮或键入Ctrl+E时,LISP会立即执行它,返回的结果为:

a is greater than 20

示例

更新名为main.lisp的源代码文件,并在其中键入以下代码。这里我们使用带有否定条件的cond结构。

main.lisp

; set a as 30
(setq a 30)
; check not a as false
(cond ((not a)
   (format t "~% a " a)) ; statement is not printed
   (t (format t "~% NOT a is Nil ~d" a))) ; 

单击“执行”按钮或键入Ctrl+E时,LISP会立即执行它,返回的结果为:

NOT a is Nil 30
lisp_decisions.htm
广告