Lisp`if`运算符中的嵌套函数
我在Common Lisp中有以下Lisp`if`运算符中的嵌套函数,lisp,common-lisp,Lisp,Common Lisp,我在Common Lisp中有以下if代码: (if (= 1 1) ((write "Hello") NIL) (else-function...)) 显然,1=1,我想这样做: 如果条件(在本例中为1=1)为真,那么我想打印“Hello”并返回NIL。我该怎么做?据我所知,我只能做这两个动作中的一个 我是否应该使用lambda同时打印并返回NIL?为了将表达式组合成顺序执行(首先执行此操作,然后执行此操作,最后返回此操作),您需要将它们包装成一些内容,除非您或多或少是在顶层编写脚本 最
if
代码:
(if (= 1 1) ((write "Hello") NIL) (else-function...))
显然,1=1,我想这样做:
如果条件(在本例中为1=1)为真,那么我想打印“Hello”并返回NIL
。我该怎么做?据我所知,我只能做这两个动作中的一个
我是否应该使用lambda同时打印并返回
NIL
?为了将表达式组合成顺序执行(首先执行此操作,然后执行此操作,最后返回此操作),您需要将它们包装成一些内容,除非您或多或少是在顶层编写脚本
最基本的构造是progn
,它按顺序计算所有给定的表单,最后返回最后一个表单的值。公共Lisp中的许多构造都有一个隐式的progn
,例如。G函数体、let体等。还有prog1
和prog2
,它们的作用相同,但分别返回运算符后面的第一个或第二个形式的值
因此,progn
是您在这里应该使用的
但是,如果您只有一个结果子句,则可以使用when
而不是if
<当有一个隐式的progn
时,code>。还有,除非,因为当您只有一个else子句时,没有结果
需要注意的是,还有其他用于其他需求的组合构造:block
允许使用显式的从
表单返回来确定运行时的值Tagbody
允许使用go
在其中跳转(但不返回任何内容,您需要额外的块来执行此操作)。它们对于创建新的控制结构(例如在宏中)非常有用。为了将表达式组合成顺序执行(首先执行此操作,然后执行此操作,最后返回此操作),您需要将它们包装成一些内容,除非您或多或少地在顶层编写脚本
最基本的构造是progn
,它按顺序计算所有给定的表单,最后返回最后一个表单的值。公共Lisp中的许多构造都有一个隐式的progn
,例如。G函数体、let体等。还有prog1
和prog2
,它们的作用相同,但分别返回运算符后面的第一个或第二个形式的值
因此,progn
是您在这里应该使用的
但是,如果您只有一个结果子句,则可以使用when
而不是if
<当
有一个隐式的progn
时,code>。还有,除非,因为当您只有一个else子句时,没有结果
需要注意的是,还有其他用于其他需求的组合构造:block
允许使用显式的从
表单返回来确定运行时的值Tagbody
允许使用go
在其中跳转(但不返回任何内容,您需要额外的块来执行此操作)。它们对于创建新的控制结构(例如宏)非常有用。请参阅专门的操作符PROGN
@RainerJoswig,非常有用,谢谢。请随时回答。请查看特别操作员PROGN
@RainerJoswig,非常感谢。请随便回答