prog
和 progn
是 Common Lisp 中的两个不同的构造,它们的主要区别在于用途和控制结构。以下是它们的详细比较:
1. progn
-
用途:用于将多个表达式组合在一起,并按顺序执行它们。它总是返回最后一个表达式的值。
-
语法:
(progn expr1 expr2 ... exprN)
-
示例:
(progn (print "Hello") (print "World") (+ 1 2)) ; 返回 3
2. prog
-
用途:用于定义一个程序块,支持局部变量的声明和更复杂的控制结构(如
go
和tag
),并允许在块内使用控制流。 -
语法:
(prog ((var1 init1) (var2 init2)) ;; 代码块 )
-
示例:
(prog ((x 10) (y 20)) (print (+ x y)) ; 打印 30 (setf x 30) x) ; 返回 30
3. 主要区别
-
控制结构:
-
progn
只是简单地执行一系列表达式,没有控制流语句。 -
prog
提供了局部变量和更复杂的控制流功能,适合编写需要多重跳转的程序。
-
-
局部变量:
-
progn
不支持局部变量。 -
prog
可以定义局部变量。
-
总结
- 使用
progn
当你需要按顺序执行多个表达式而不需要局部变量或控制流时。 - 使用
prog
当你需要定义局部变量或使用更复杂的控制流程时。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于