我有这样的功能。
(defun foo ()
(if (condition)
(do-something)))
但是我想写这样来避免不必要的缩进。
(defun foo ()
(if not (condition) (return))
(do-something))
显然return
没有被抓住,因为这里没有阻止。
如何摆脱这个功能? 或者这对于lisp来说是一个坏方法吗?
答案 0 :(得分:2)
Defun创建一个以函数名命名的块,可以通过调用return-from来使用。
(return-from foo (do-something))
使用它来避免一点压痕是不好的风格。您的编辑器应该能够自动进行缩进,并且在没有提前返回的情况下,函数通常更容易阅读。
答案 1 :(得分:1)
@ m-n已经完全回答了你的问题。我只想提供一个在这种情况下“好风格”的例子:
(defun foo ()
(when (condition)
(do-something)))
在我看来,它甚至看起来比
更好(defun foo ()
(if (condition)
(do-something)))
,特别是
(defun foo ()
(if (not (condition)) (return-from foo))
(do-something))
(这是缩进,因为我的emacs与slime等产生它)
N.B。:而不是(when (not (condition)) ...)
使用(unless (condition) ...)
。