我如何在Dr.Racket中编写一个函数,它使用一个整数列表并生成一个新的整数列表?

我如何在Dr.Racket中编写一个函数,它使用一个整数列表并生成一个新的整数列表?,racket,higher-order-functions,Racket,Higher Order Functions,我如何在Dr.Racket中编写一个函数,该函数使用一个整数列表并生成一个新的整数列表,对每个元素应用一个转换(sqr)。 注意:每个列表中的元素数量相等 这里有两个例子来说明我的意思: 例1: (list (list 1 2) (list 3 -2)) 应产生: (list (list 1 4) (list 9 4)) (list (list 9 16 25) (list 4 1 9) (list 4 9 49) (list 0 9 4)) 例2: (list (list 3 4 5)

我如何在Dr.Racket中编写一个函数,该函数使用一个整数列表并生成一个新的整数列表,对每个元素应用一个转换(sqr)。 注意:每个列表中的元素数量相等

这里有两个例子来说明我的意思:

例1:

(list (list 1 2) (list 3 -2))
应产生:

(list (list 1 4) (list 9 4))
(list (list 9 16 25) (list 4 1 9) (list 4 9 49) (list 0 9 4))
例2:

(list (list 3 4 5) (list 2 1 3) (list 2 3 7) (list 0 -3 2))
应产生:

(list (list 1 4) (list 9 4))
(list (list 9 16 25) (list 4 1 9) (list 4 9 49) (list 0 9 4))
以下是我目前的代码:

(define (transform-to-sqr b)
  (map sqr b))
如果我输入:

(transform-to-sqr (list (list 1 2) (list 3 -2))) 
我收到一条错误消息,上面说: sqr:需要一个数字;给定(列表1和2)

为什么会发生这种情况。有人能告诉我我做错了什么吗。
感谢您的帮助。

映射的高阶过程对列表中的元素应用一个过程,但在这种情况下,元素本身就是列表。要对嵌套元素进行操作,我们需要嵌套对
map
的调用:

(define (transform-to-sqr matrix)
  (map (λ (row) (map sqr row))
       matrix))
它按预期工作:

(transform-to-sqr '((1 2) (3 -2)))
=> '((1 4) (9 4))

(transform-to-sqr '((3 4 5) (2 1 3) (2 3 7) (0 -3 2)))
=> '((9 16 25) (4 1 9) (4 9 49) (0 9 4))