Scheme 球拍中的矩阵操作

Scheme 球拍中的矩阵操作,scheme,racket,Scheme,Racket,我需要编写一个函数,在Racket中生成矩阵的第n列,而不使用递归。例如(list(list 1 2 3)(list 2 3 4)(list 6 7 9))如果我想要第二列,我会收到(list 2 3 7) 我尝试了(append(map(lambda(n)(list ref(list ref M)n)n))M,但它不断向我显示一个错误。尝试的解决方案使用了list ref两次,这是不需要的,其中一个调用没有足够的参数:(list ref M)函数只使用一个参数,但它需要两个参数——一个列表和一

我需要编写一个函数,在Racket中生成矩阵的第n列,而不使用递归。例如
(list(list 1 2 3)(list 2 3 4)(list 6 7 9))
如果我想要第二列,我会收到
(list 2 3 7)


我尝试了
(append(map(lambda(n)(list ref(list ref M)n)n))M
,但它不断向我显示一个错误。

尝试的解决方案使用了
list ref
两次,这是不需要的,其中一个调用没有足够的参数:
(list ref M)
函数只使用一个参数,但它需要两个参数——一个列表和一个整数

list ref
函数将从输入列表返回索引元素,因此
(list ref'(1 2 3)1
将返回
2
。考虑< <代码> map >代码>将在这里执行:矩阵表示为列表(行列表),即AS <代码>((1 2 3)(2 3 4)(6 7 9))< /代码>。
map
功能将作用于输入列表的成员,这些成员是列表
(1 2 3)
(2 3 4)
(6 7 9)
。通过
map
在该输入上ping
list ref
函数,您可以从子列表中获取所需的任何元素。因此,
(map(lambda(row)(列表参考第1行))((1234)(679))
将根据需要计算为
(237)

下面是一个函数,可用于从矩阵中提取任意列:

(define (nth-column M n)
  (map (lambda (row) (list-ref row n)) M))
示例交互:

scratch.rkt>(定义M'((1 2 3)
(2 3 4)
(6 7 9)))
scratch.rkt>(第n列m1)
'(2 3 7)
scratch.rkt>(第n列M 0)
'(1 2 6)
scratch.rkt>(第n列M2)
'(3 4 9)

这是否回答了您的问题?将
map
与调用
list ref
的函数(即使用lambda)一起使用。编辑不得使现有答案无效。