Elisp函数返回值

时间:2013-05-14 16:07:36

标签: function emacs return elisp

我对Elisp有一个(可能)愚蠢的问题。我希望函数返回tnil,具体取决于when条件。这是代码:

(defun tmr-active-timer-p
  "Returns t or nil depending of if there's an active timer"
  (progn
    (if (not (file-exists-p tmr-file))
        nil
      ; (... more code)
      )
    )
)

但我有一个错误。我不确定如何使函数返回一个值...我已经读取了一个函数返回最后一个表达式结果值,但在这种情况下,我不想做类似的事情(PHP混乱警告):

// code

if ($condition) {
  return false;
}

// more code...

也许我错过了这一点,功能编程不允许这种方法?

1 个答案:

答案 0 :(得分:16)

首先,您需要tmr-active-timer-p之后的参数列表; defun语法是

(defun function-name (arg1 arg2 ...) code...)

第二次,您无需将身体包裹在progn中。

第三,返回值是评估的最后一个表单。如果你的情况你可以写

(defun tmr-active-timer-p ()
  "Returns t or nil depending of if there's an active timer."
  (when (file-exists-p tmr-file)
      ; (... more code)
    ))

如果文件不存在,它将返回nil(因为(when foo bar)(if foo (progn bar) nil)相同)。

最后,在lisp中,挂括号被视为代码格式不佳。

PS。 Emacs Lisp没有return,但确实有Nonlocal Exits。除非你真的知道你在做什么,否则我建议你避免使用它们。