If statement 带有then子句的If语句(LISP)

If statement 带有then子句的If语句(LISP),if-statement,lisp,If Statement,Lisp,因此,我尝试自学lisp,我目前正在使用此网站作为参考: 我不太明白为什么执行then子句,尽管if子句是假的 (setq a 10) (if (> a 20) then (format t "~% a is less than 20")) (format t "~% value of a is ~d " a) 输出为: a is less than 20 value of a is 10 then子句是否总是执行,即使if语句为false?(在这种情况下是这样的) 任何帮助将

因此,我尝试自学lisp,我目前正在使用此网站作为参考:

我不太明白为什么执行then子句,尽管if子句是假的

(setq a 10)
(if (> a 20)
   then (format t "~% a is less than 20"))
(format t "~% value of a is ~d " a)
输出为:

a is less than 20
value of a is 10 
then子句是否总是执行,即使if语句为false?(在这种情况下是这样的)

任何帮助将不胜感激,也很抱歉,如果我的术语是完全不正确的我仍然是新的Lisp

根据if,它有3个元素<代码>测试表达式eg
(>a 10)
,a
然后表达式
eg
(-a 10)
其他表达式
例如
a

(if (> a 10) ; if a is larger than 10
    (- a 10) ; then return the value of a minus 10
    a)       ; else return the value of a
看看你的代码:

(if (> a 20)                          ; if a is larger than 20
    then                              ; then return the value of "then"
    (format t "~% a is less than 20")); else print a is less than 20 to screen
在本例中,他们将then子句作为单个变量
then
。由于测试为假,因此始终打印else表达式

根据if,它有3个元素<代码>测试表达式eg
(>a 10)
,a
然后表达式
eg
(-a 10)
其他表达式
例如
a

(if (> a 10) ; if a is larger than 10
    (- a 10) ; then return the value of a minus 10
    a)       ; else return the value of a
看看你的代码:

(if (> a 20)                          ; if a is larger than 20
    then                              ; then return the value of "then"
    (format t "~% a is less than 20")); else print a is less than 20 to screen

在本例中,他们将then子句作为单个变量
then
。由于测试为假,因此始终打印else表达式

谢谢,但我不太明白你的解释?尽管if语句不满足,为什么还要返回一个值呢?
then
不是一个关键字,因此假设它是测试为真时要执行的代码的一个值。如果测试为真,您会得到错误,即
那么
不是一个绑定变量。每个被评估的符号都是一个变量,就像你的例子中的
a
一样。你也可以直接在网站上测试lisp代码,以防你想摆弄它:)但是,是的,我很困惑地看到,当他们使用lisp代码时,他们得到的结果与忽略它时是不同的。它看起来像是使用了CLISP,所以它是通用的lisp。我理解这种混乱。该示例只是将
然后
作为要在测试为真的情况下进行计算的表达式,而不会对其进行计算,因此您可以看到文本。我会更新我的答案。不<代码>(>A20)
是测试。如果为true,则执行表达式
then
。如果不正确,则执行表达式
(格式t“~%a小于20”)
不是关键字,而是将
a
设置为
21
时的操作。它会失败,因为
那么
仍然是一个未绑定的变量,但是因为它没有在示例中执行,因为测试是假的,所以它可能是任何东西。谢谢,但我不太确定我是否理解您的解释?尽管if语句不满足,为什么还要返回一个值呢?
then
不是一个关键字,因此假设它是测试为真时要执行的代码的一个值。如果测试为真,您会得到错误,即
那么
不是一个绑定变量。每个被评估的符号都是一个变量,就像你的例子中的
a
一样。你也可以直接在网站上测试lisp代码,以防你想摆弄它:)但是,是的,我很困惑地看到,当他们使用lisp代码时,他们得到的结果与忽略它时是不同的。它看起来像是使用了CLISP,所以它是通用的lisp。我理解这种混乱。该示例只是将
然后
作为要在测试为真的情况下进行计算的表达式,而不会对其进行计算,因此您可以看到文本。我会更新我的答案。不<代码>(>A20)
是测试。如果为true,则执行表达式
then
。如果不正确,则执行表达式
(格式t“~%a小于20”)
不是关键字,而是将
a
设置为
21
时的操作。它会失败,因为
然后
仍然是一个未绑定的变量,但是因为它在示例中没有执行,因为测试为false,所以它可能是任何东西。该教程似乎有点垃圾。网上有很多很好的免费Lisp书籍,比如Peter Seibel的。那个教程看起来有点垃圾。网上有很多很好的免费Lisp书籍,比如Peter Seibel的。