我正在尝试在Elisp中使用闭包实现类似Haskell的高阶函数。
;;; -*- lexical-binding: t -*-
(defun foo (pair)
(car pair))
(defun* .curry (fn)
(lambda (x y &rest args) (apply fn (cons x y) args)))
((lambda (x y) (1+ x)) 2 3)
((lambda (&rest args) (apply (.curry #'foo) args)) 2 3)
(funcall (.curry #'foo) 2 3)
((.curry #'foo) 2 3)
问题在于最后一行返回了错误无效的函数
。因此,闭包似乎并没有考虑到合理的函数。我仍然可以在mapc
中使用(.curry #'foo)
,但不能在钩子中使用。
我能做些什么吗?
.curry
重写为宏?这是个好主意!感谢提供所有这些信息! - KAction