Lisp`if`运算符中的嵌套函数

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?为了将表达式组合成顺序执行(首先执行此操作,然后执行此操作,最后返回此操作),您需要将它们包装成一些内容,除非您或多或少是在顶层编写脚本 最

我在Common Lisp中有以下
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,非常感谢。请随便回答