If statement lisp中是否有嵌套的if?
在大多数lisp中,If statement lisp中是否有嵌套的if?,if-statement,nested,lisp,structure,If Statement,Nested,Lisp,Structure,在大多数lisp中,105) (格式t“第一个数字大于~%”) (< 10 15) (格式t“第二个数字大于~%”) (= 10 10) (格式t“两个数字相等~%”) 是您要找的吗?我不确定,因为语法很混乱。我将其与C语言的嵌套if进行了比较,我想知道LISPLisp Nestedif是否与C Nestedif类似。您可以在任何允许使用任何表达式的地方使用if,包括在另一个if中。为什么在第二种情况下打印第一个数字大于,其中10不大于15?顺便说一句,您没有嵌套问题中的数字,在你所说的第一个语
的语法是(if[])
,尽管可能有一些变化:有时
是强制性的,在一些较旧的lisp中,
可以有多种形式(我认为elisp是目前唯一常用的lisp)。因此,如果嵌套的很简单:
(if (> 10 5)
(format t "First number is greater ~%"))
(if (> 10 15)
(format t "First number is greater ~%")
(format t "Second number is greater ~%"))
(if (= 10 10)
(format t "Both numbers are equal"))
这在缩进方面很烦人,因此有一种称为cond
的形式,在公共Lisp中,上面的表达式是:
(if a
...
(if b
...
(if c
...
...)))
还是在计划中
(cond
(a ...)
(b ...)
(c ...)
(t ...))
cond
具有一个很好的特性,即所有的…
都可以是多种形式
如果你没有cond
,你可以用If
:这里有一个使用Scheme宏的版本(实际上Racket的:void
我认为是Racket),叫做kond
:
(cond
(a ...)
(b ...)
(c ...)
(else ...))
类似地,如果您没有if
,您可以使用cond
来编写它:这里有一个名为yf
的代码,再次使用Scheme宏使用kond
来编写:
(define-syntax kond
(syntax-rules (else)
[(_)
(void)]
[(_ (else form ...))
(begin form ...)]
[(_ (test form ...)
more ...)
(if test
(begin form ...)
(kond more ...))]))
这两种可能都有不同的车
从历史上看,cond
是我认为最原始的
(define-syntax yf
(syntax-rules ()
[(_ test result)
(kond (test result))]
[(_ test result otherwise)
(kond (test result)
(else otherwise))]))
(cond(>105)
(格式t“第一个数字大于~%”)
(< 10 15)
(格式t“第二个数字大于~%”)
(= 10 10)
(格式t“两个数字相等~%”)
是您要找的吗?我不确定,因为语法很混乱。我将其与C语言的嵌套if进行了比较,我想知道LISPLisp Nestedif
是否与C Nestedif
类似。您可以在任何允许使用任何表达式的地方使用if
,包括在另一个if
中。为什么在第二种情况下打印第一个数字大于
,其中10不大于15?顺便说一句,您没有嵌套问题中的数字,在你所说的第一个语法/示例中,如果嵌套if中的所有条件都为true,那么不应该打印所有语句吗?@Zel:不,第一件事是true,如if(…)。。。;否则如果(…)。。。;否则在C中,比如说(除了if
是Lisp中的表达式,因为Lisp是一种表达式语言:没有语句,所以(+(if x 1 2)3)
就可以了)。这里的括号放错了。您应该有(cond(test1exp1…(test2exp2…)
,其中的测试类似于(>105)
。如果需要,还可以添加(else exp3…
子句。
(cond ((> 10 5)
(format t "First numbers is greater. ~%")
(< 10 15)
(format t "Second number is greater. ~%")
(= 10 10)
(format t "Both numbers are equal. ~%")))