如何使用带有列表列表的地图

问题描述 投票:0回答:1

我需要在 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)
,这是解决方案的一部分,但这不适用于列表列表。

请帮忙

scheme racket nested-lists map-function
1个回答
0
投票

你正在重新实现一个

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))) ==> ....

希望你能完成剩下的。

© www.soinside.com 2019 - 2024. All rights reserved.