在此示例中,`map` 如何表现出矩阵乘法失败?

How does `map` behave that matrix multiplication fails in this example?

我正在尝试制作一个在方案中进行矩阵向量乘法的函数。我对结果感到困惑。这是我的代码,它定义了一个函数来计算两个向量的点积:

(define (accumulate op initial sequence)
  (if (null? sequence)
      initial
      (op (car sequence)
      (accumulate op initial (cdr sequence)))))

(define (dot-product v w)
  (accumulate + 0 (map * v w)))

这 return 是向量的预期点积,例如 (list 2 3 4)(list 1 1 1)。但是当我尝试用

计算矩阵和向量的乘积时
(define (matrix-*-vector m v)
  (map (lambda (x) dot-product v x) m))

此函数将简单地 return 原始矩阵 m,而不是预期的结果。我特别困惑,因为我可以用 Wolfram 语言很好地编写它并且它的行为符合预期:

myMatrixMult[m_,v_]:=Map[Function[x,Dot[v, x]], m]

(我不认为你需要精通任何一种语言才能看到相似之处)。

我对方案实施有什么误解?使用 mapdot-product 定义矩阵向量乘法需要做什么?

您的 lambda 中缺少括号:

(lambda (x) dot-product v x)

从不调用 dot-product,它只是 returns x

你需要

(lambda (x) (dot-product v x))