我剛開始玩弄Lisp的(共Lisp的),這裏的計算數字申請#「或不適用#」
CL-USER> (defun average (list) (/ (apply #'+ list) (length list)))
AVERAGE
CL-USER> (average '(1 2 3 4))
5/2
但是如果名單的平均值的函數我重寫像這樣
CL-USER> (defun average (list) (/ (+ list) (length list)))
它不會因爲(+「(列表的號碼))無法評估,長度因此arguement並在+的表達是不兼容的工作的功能。
是否有一種cajoling(list)方法可以用+作爲表達式自然地進行評估,並作爲數據傳遞給length?而不是使用應用#」
我已經試過這樣:
(defun average (list) (/ (+ list) (length '(list))))
,但這似乎並沒有任何做吧!
有你希望能夠做到這一點實際的原因是什麼?我認爲你的問題是語法(函數(arg1 arg2))在某種程度上比(函數arg1 arg2)更「自然」。 – 2014-10-02 01:33:19
沒理由,我只是想明白!不過,(函數arg1 arg2)看起來更加「自然」(高度主觀的!無可否認),在我看來,操作函數如何看待參數會更「自然」,而不是「超越騎乘「函數(用尖銳的引用)來適應參數。如果你明白我的意思。由於引用(列表)繞過了默認的評估規則,我只是想知道是否有一些「反向」的引用,我錯過了某處。 – trev66 2014-10-02 11:28:08