我試圖在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)
返回一個錯誤。我認爲即使看到一個人們如何實施這種模式的典型例子也會有所幫助。