【发布时间】:2022-04-05 06:59:15
【问题描述】:
假设我在多个 mapcar 函数中,并且找到了成功的终止条件。我想停止执行其余代码。
在java中,我可以做 System.exit(0);
lisp 有类似的东西吗?
【问题讨论】:
标签: lisp common-lisp
假设我在多个 mapcar 函数中,并且找到了成功的终止条件。我想停止执行其余代码。
在java中,我可以做 System.exit(0);
lisp 有类似的东西吗?
【问题讨论】:
标签: lisp common-lisp
MAPCAR不适用于迭代数据并在找到成功的终止条件时退出。
Common Lisp 提供MAPC,类似于MAPCAR,但不累加结果。另见函数MAP。
此外,Common Lisp 还提供了许多函数,例如 FIND、FIND-IF、FIND-IF-NOT、...
对于流控制,Common Lisp 有 RETURN、RETURN-FROM、CATCH 和 THROW 等等。
【讨论】:
System.exit() 的等价物在像 Lisp 这样面向 REPL 的环境中没有意义;它可能存在,但不会让你的函数返回一个值。
如果您的代码结构合理,(return-from) 可能会满足您的需求。
【讨论】:
在这种情况下,这可能不是合适的解决方案(使用 Dougal 的答案从嵌套循环/调用返回),但为了完整起见,System.exit(0); 的字面意思相当于 Portable Exit。
如您所见,它在不同的实现中完全不同,因为它不是标准的一部分。
【讨论】:
这是一个适用于大多数情况的助手。它允许您退出或不退出,并在标准输出中为您提供明确的消息:
(defun _exit (&optional s)
"Print and exit"
(if s
(error (format "_exit called - %s\n" s))
(error "_exit called")
)
)
用法:
(_exit "testing 123")
程序退出前的输出:
> _exit called - testing 123
这将退出所有函数并终止脚本。
【讨论】: