我的代码输出有问题,我认为是在检查列表是否为空的条件时。
我要完成的问题是:编写一个函数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”。我很确定这是因为我没有正确停止递归或没有正确使用条件。我只是不完全确定如何纠正它。