1

我想编写一个函数来反转列表中的所有子列表(但只有顶层的子列表)。我试图弄清楚我是否可以只filter列出列表并reverse在使用之前map通过做做 (filter list? (reverse '((1 2) 9 (16 5) 64))),但这只是反过来((16 5) (1 2))。我正在寻找类似的输出:((2 1) 9 (5 16) 64)).

我应该使用mapand reverse,但我无法从那里开始。

4

1 回答 1

3

这很简单,您只需要在尝试反转它之前询问每个项目是否是一个列表:

(define lst '((1 2) 9 (16 5) 64))

(map (lambda (e)
       (if (list? e) (reverse e) e))
     lst)

> '((2 1) 9 (5 16) 64)

filter在这种情况下不起作用,因为您有兴趣处理输入列表中的所有元素,即使只需要反转实际列表。

于 2012-07-19T18:55:09.587 回答