【发布时间】:2019-03-20 00:23:30
【问题描述】:
如果我有一个接受 3 个参数并返回一个列表的函数:
(some-function 1 2 3) --> '(3 2 1)
我有一个这样的列表列表:
( (1 2 3) (2 1 3) (3 2 1) )
如何映射“某些功能”以将所有列表用作元素?
谢谢。
【问题讨论】:
标签: list recursion functional-programming scheme lisp
如果我有一个接受 3 个参数并返回一个列表的函数:
(some-function 1 2 3) --> '(3 2 1)
我有一个这样的列表列表:
( (1 2 3) (2 1 3) (3 2 1) )
如何映射“某些功能”以将所有列表用作元素?
谢谢。
【问题讨论】:
标签: list recursion functional-programming scheme lisp
如果列表仅嵌套一次,则可以使用 fold 和 append 将它们转换为单个列表,然后使用 apply 对结果调用 some-function,即
(fold append '() '((1 2 3) (2 1 3) (3 2 1))) => (2 3 1 3 2 1 1 2 3)
(apply some-function (2 3 1 3 2 1 1 2 3))
否则,您可以将 apply 和 some-function 包装在传递给 map 的 lambda 中
(map (lambda (x) (apply some-function x)) '((1 2 3) (2 1 3) (3 2 1)))
【讨论】:
我不确定你的意思是什么结果。
(define (rev-list a b c)
(list c b a))
(rev-list 1 2 3)
⇒ (3 2 1)
(apply rev-list '((1 2 3) (2 1 3) (3 2 1)))
⇒ ((3 2 1) (2 1 3) (1 2 3))
(map (lambda (l) (apply rev-list l)) '((1 2 3) (2 1 3) (3 2 1)))
⇒ ((3 2 1) (3 1 2) (1 2 3))
【讨论】: