我遇到了代码输出的问题,我想是在检查列表中null的条件时。在Lisp中不使用mapcar将列表中的数字乘以数字(坐标方式)
我想完成的问题是:编写一个函数vecmul
,它将输入两个简单的数字列表。 vecmul应该乘以这些列表坐标明智,因为你会乘以向量。假设两个列表长度相同。 [例如,(vecmul '(2 3 4 5) '(1 4 5 2))
返回(2*1 3*4 4*5 5*2)
或(2 12 20 10)
。您不允许使用mapcar
此功能]
到目前为止,我有
(defun vecmul (list list2)
(cond ((null list) 0)
(t (cons (* (car list) (car list2))
(vecmul (cdr list) (cdr list2))))))
[170]> (setq l '(2 4 6))
(2 4 6)
[171]> (setq r '(1 3 5))
(1 3 5)
[172]> (vecmul l r)
(2 12 30 . 0)
我得到正确的数字,它只是列表中添加“”和列表末尾的“0”。我非常肯定这是因为我没有停止递归权或者没有正确使用cond。我只是不完全确定如何纠正它。