我需要在 Scheme (Racket) 的列表列表中使用
map
。
我特别想要的是
(map-lists add1 '((3 1) (2 8))) => '((4 2) (3 9))
.
我知道如何递归地解决这个问题,就像这样:
(define map-lists
(lambda (f A)
(if (null? A)
'()
(if (pair? (car A))
(cons (map f (car A)) (map-lists f (cdr A)))
(if (null? (car A))
(cons (car A) (map-lists f (cdr A)))
(cons (f (car A)) (map-lists f (cdr A))))))))
但是我需要解决这个without递归!我知道
(map add1 '(3 1))
会给出 '(4 2)
,这是解决方案的一部分,但这不适用于列表列表。
请帮忙
你正在重新实现一个
map
并在其中使用另一个。
您可以只使用两个
map
来表示嵌套列表的两个级别。考虑一下:
(map 1+ (list 2 3)) ==> (3 4)
(lambda (x) (map 1+ (list 2 3))) #f ==> (3 4)
(lambda (x) (map 1+ x)) (list 2 3) ==> (3 4)
(lambda (x) (map 1+ x)) (list 7 8) ==> (8 9)
(map (lambda (x) (1+ x)) (list 2 3)) ==> (3 4)
(map (lambda (x) (map 1+ x)) (list (list 2 3) (list 7 8))) ==> ....
希望你能完成剩下的。