我刚开始玩弄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