Я пытаюсь создать функцию в elisp, которая возвращает другую функцию. Я посмотрел на этот ответ на аналогичный вопрос (how to return function in elisp), но не понял ответа (я буквально сейчас начинаю изучать elisp сегодня, поэтому, пожалуйста, извините мое невежество). Я думал, что более простой пример поможет. Во-первых, рассмотрим функцию, проверить, является ли число делится на 5:Получение elisp для возврата функции в качестве возвращаемого значения
(defun divisible-by-5 (x)
;; tests whether a number is divsible by 5.
(setq remainder (% x 5))
(if (= remainder 0) 1 0)
)
Это прекрасно работает:
(divisible-by-5 25)
1
Теперь предположим, что я хочу создать функцию, которая может создать более из этих видов испытаний функции --- что-то вроде:
(defun divisible-by-z (z)
(lambda (z)
(setq remainder (% x z))
(if (= remainder 0) 1 0))
)
Это делает не работу. Например,
(defun divisible-by-3 (divisible-by-z 3))
(divisible-by-3 4)
возвращает ошибку. Я думаю, что даже увидеть elisp-идиоматический пример того, как можно реализовать этот шаблон, было бы полезно.