【问题标题】:Mapping multiple functions, in order, over a single list [closed]在单个列表上按顺序映射多个函数[关闭]
【发布时间】:2013-10-09 08:33:30
【问题描述】:

我想在一个列表中按顺序映射三个不同的函数。为了说明我的意思,假设我们要做以下三个映射:

(map foo mylist)
(map bar mylist)
(map foobar mylist)

如果我们将 mylist 定义为'(1 2 3),并且我们一次运行上述函数,我们会得到:

(map foo mylist)     ===>  (foo1 foo2 foo3)
(map bar mylist)     ===>  (bar1 bar2 bar3)
(map foobar mylist)  ===>  (foobar1 foobar2 foobar3)

相反,我希望输出采用以下格式:

===>  ((foo1 bar1 foobar1) (foo2 bar2 foobar2) (foo3 bar3 foobar3))

你会怎么做呢?

【问题讨论】:

  • 在 StackOverflow 上结束问题的原因之一是“要求代码的问题必须证明对正在解决的问题有最低限度的了解。包括尝试的解决方案、它们为什么不起作用以及预期的结果. 另请参阅:堆栈溢出问题清单。”我认为您已经非常清楚地解释了任务是什么,以及输出应该是什么(谢谢!)。您是否尝试过解决此问题?如果是这样,你能把它们包括进来吗?什么对他们不起作用?

标签: lisp scheme racket


【解决方案1】:

你可以嵌套两个maps来达到想要的效果:

(map (lambda (e)
       (map (lambda (f) (f e))
            myfuncs))
     mylist)

上面mylist是输入列表,myfuncs是函数列表。例如,这些列表:

(define myfuncs (list sqrt square cube))
(define mylist '(1 2 3))

... 将产生这个输出:

'((1 1 1) (1.4142135623730951 4 8) (1.7320508075688772 9 27))

【讨论】:

    猜你喜欢
    • 2012-06-19
    • 1970-01-01
    • 1970-01-01
    • 2012-02-20
    • 2021-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多