我想寫一些我的第一個代碼中的Emacs Lisp,我無法理解以下行爲秩序emacs的評價口齒不清
(defun sq (x) (* x x))
(member 9 '(1 2 3 4 (sq 3)))
這個計算結果爲nil
,但我期待的價值爲(9)
現在我猜emacs lisp使用applicative-order評估,那麼爲什麼在函數應用之前未對列表進行評估?
因爲我需要它只是用於測試非空條件下,我終於可以讓它工作如下,
(member 9 (cons (sq 3) '(1 2 3 4)))
計算結果爲(9 1 2 3 4)
我的問題是做這項工作,因爲(sq 3)
是一個函數(cons)的「直接」參數不像前面的例子中它是一個參數內的元素?在此使用cons
是一種可接受的解決方法,還是有更好/正確的方法來獲得所需的行爲?
*雖然無法確定emacs lisp使用的順序評估,但我在方案解釋器中嘗試了相同的表達式,並從SICP獲得了相同的答案,我知道該方案使用適用的順序評估。現在我真的很困惑!
任何幫助表示讚賞。
非常感謝。這很有幫助:) – naiquevin
@naiquevin,我的榮幸。 –