方案点产品功能的两个列表

时间:2016-10-19 02:02:00

标签: scheme racket

我试图定义一个以两个列表作为参数的点生成函数,并通过取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))))))

1 个答案:

答案 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或甚至更多的值,该方法也是可扩展的。