我想用Emacs Lisp定義一個累加器列表並且寫下面的代碼,但是我得到一個錯誤,說initV
是一個無效變量。看起來initV
未在功能define-accum
中評估。我在哪裏犯了一個錯誤? (我只想知道爲什麼,但我知道有其他方法可以達到我的目標。)爲什麼不評估Emacs lisp函數的參數?
(defun define-accum (name initV)
(defalias name (lambda (v) (+ v initV))))
(setq accums '((myadd1 . 1)
(myadd2 . 2)))
(dolist (a accums)
(define-accum (car a) (cdr a)))
(message "result = %d" (+ (myadd1 1) (myadd2 1)))
感謝。我知道但是我仍然不明白爲什麼應該引用 –
問題是'lambda'是自引用的,因此'initV'確實在別名中,它在評估別名時是未定義的。 – Tobias