【问题标题】:Scheme: Mapping a list as argument to a function方案:将列表作为参数映射到函数
【发布时间】: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


    【解决方案1】:

    如果列表仅嵌套一次,则可以使用 foldappend 将它们转换为单个列表,然后使用 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))
    

    否则,您可以将 applysome-function 包装在传递给 map 的 lambda 中

    (map (lambda (x) (apply some-function x)) '((1 2 3) (2 1 3) (3 2 1)))
    

    【讨论】:

    • 抱歉,我是这种语言的新手。我尝试使用地图功能,不知道应用功能存在。感谢您的回答,它帮助了很多!
    【解决方案2】:

    我不确定你的意思是什么结果。

    (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))
    

    【讨论】:

    • 抱歉,我是这种语言的新手。我尝试使用地图功能,不知道应用功能存在。感谢您的回答,帮助很大!
    猜你喜欢
    • 2011-08-04
    • 1970-01-01
    • 2017-10-13
    • 1970-01-01
    • 2015-04-11
    • 2018-08-03
    • 1970-01-01
    • 2012-09-27
    • 1970-01-01
    相关资源
    最近更新 更多