如何提前退出 PicoLisp 函数?

问题描述 投票:0回答:1

在 Common Lisp 中,我们可以通过“return-from”提前退出具有指定返回值的函数。 PicoLisp中有类似的函数吗?

我尝试过谷歌搜索和 ChatGPT 但无济于事。有趣的是,ChatGPT 虚构了一个不存在的“退出”功能:

(de my-function (x)
  (if (= x 0)
    (exit "Early return value") ## Imagined by GPT
    (+ x 10) ) )

像这样就好了。

lisp picolisp
1个回答
0
投票

这个问题的部分答案是 quit 函数,它可以让你提前退出函数。

来源:https://software-lab.de/doc/refQ.html#quit

(退出['任何['任何]]) 停止当前执行。如果未给出参数,则执行所有挂起的finally 表达式,并将控制权返回到顶层读取-求值-打印循环。否则,将输入错误处理程序。第一个参数可以是一些错误消息,第二个参数可能是错误的原因。

: (de foo (X) (quit "Sorry, my error" X))
-> foo
: (foo 123)                                  # 'X' is bound to '123'
123 -- Sorry, my error                       # Error entered
? X                                          # Inspect 'X'
-> 123
?                                            # Empty line: Exit
:

但是,请注意 quit 函数似乎不会产生返回值。

? (de foo (X) (quit "Sorry, my error" X))
-> foo
? (setq ret-value (foo "DOG"))
"DOG" -- Sorry, my error
? ret-value
-> NIL
© www.soinside.com 2019 - 2024. All rights reserved.