我如何在Dr.Racket中编写一个函数,它使用一个整数列表并生成一个新的整数列表?
我如何在Dr.Racket中编写一个函数,该函数使用一个整数列表并生成一个新的整数列表,对每个元素应用一个转换(sqr)。 注意:每个列表中的元素数量相等 这里有两个例子来说明我的意思: 例1:我如何在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)
(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))