curry
目前,必须使用 Alexandria 的 curried 函数调用funcall
. 但是,可以设置新函数symbol-function
,这样我们就可以不用它并将其视为真正的函数。在https://lispcookbook.github.io/cl-cookbook/functions.html#with-the-alexandria-library上说明:
(defun adder (foo bar)
"Add the two arguments."
(+ foo bar))
(defvar add-one (alexandria:curry #'adder 1) "Add 1 to the argument.")
(funcall add-one 10) ;; => 11
(setf (symbol-function 'add-one) add-one)
(add-one 10) ;; => 11
;; and still ok with (funcall add-one 10)
有充分的理由不允许这两种风格吗?在这种柯里化的背景下,这对我来说看起来很有趣。
ps:大约 3 周前,我确实在 Alexandria 的问题跟踪器上询问过
pps:https ://gitlab.common-lisp.net/alexandria/alexandria/blob/master/functions.lisp#L116