Я пытаюсь реализовать Haskell-подобную функцию высокого порядка в Elisp, используя затворы.Emacs lisp поддержка высокого порядка
;;; -*- 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)
Проблема заключается в том, что последняя строка возвращает ошибку Invalid function
. Таким образом, кажется, что закрытие не считается разумной функцией. Я все еще могу использовать (.curry #'foo)
в mapc
, но не в перехватах. Я что-то могу с этим поделать?
Переписать '.curry' как макрос? Это идея! Спасибо за всю эту информацию! – KAction