lisp中奇数元素之和

lisp中奇数元素之和,lisp,common-lisp,Lisp,Common Lisp,我必须对奇数位置上的奇数元素c求和。这是行不通的。有人能告诉我哪里出了错吗?多谢各位 (defun sum (list) (cond ((null list) 0) ((= (mod 2 (car list)) 0) (sum (cddr list))) (T (+ (car list) (sum (cddr list)))))) 检查函数mod的参数顺序。应该是: (= (mod (car list) 2) 0) 为了避免这个错误,您可以使用函数evenp来代替

我必须对奇数位置上的奇数元素c求和。这是行不通的。有人能告诉我哪里出了错吗?多谢各位

(defun sum (list)
  (cond
    ((null list) 0)
    ((= (mod 2 (car list)) 0) (sum (cddr list)))
    (T (+ (car list) (sum (cddr list))))))

检查函数mod的参数顺序。应该是:

(= (mod (car list) 2) 0)

为了避免这个错误,您可以使用函数evenp来代替。

您的原始定义奇数位置的奇数元素之和实际上非常清晰地转换为循环:

(loop for i from 0 
  for x in '(0 1 2 3 4 5 6)
  when (and (oddp i) (oddp x))
  sum x)
您最初的解决方案通过cddr向下移动,这实际上是一种很好的方法。您也可以使用循环来完成此操作。对rest的初始调用只是为了从索引1开始:

(loop for x in (rest '(0 1 2 3 4 5 6)) by #'cddr
   when (oddp x)
   sum x)

“它不工作”是什么意思?为什么使用mod if会工作得一样好,而且更清楚一点?@Baggers-Yup:它是:for-as-in-list::=var[type spec]在form1中[按步骤乐趣]