prog 和 progn の区别

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​ 当你需要定义局部变量或使用更复杂的控制流程时。
  • 待分类

    用户发帖时如果不填标签,则默认加上“待分类”。这样做是为了减少用户发帖的负担,同时也减少运营维护的工作量。具有帖子更新权限的用户可以帮助社区进行帖子整理,让大家可以更方便地找到所需内容。这里是关于这样设计的一些思考,欢迎讨论。

    5 引用 • -279 回帖 • 4 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...