我试图定义一个以两个列表作为参数的点生成函数,并通过取x1 * y1 + x2 * y2等来应用点积版本。我得到了一个空列表,但就是这样。感谢。
(define (dot-prod l1 l2)
(cond ((or (null? l1)(null? l2)) '())
(else
(cons (* (car l1) (car l2))
(* (cdr l1) (cdr l2))))))
答案 0 :(得分:1)
'for / sum'循环来实现简单易懂的功能。如果l和k是2个列表:
(define (dotproduct l k)
(for/sum ((i l)(j k))
(* i j)))
测试:
(dotproduct '(1 2 3) '(4 5 6))
; =>32
如果(x y)值作为列表列表出现,也可以修改它:
(define (f l)
(for/sum ((i l))
(apply * i)))
(f '((1 4)(2 5)(3 6)))
; => 32
如果要评估x,y,z或甚至更多的值,该方法也是可扩展的。