Jai*_*nox 1 lisp scheme racket
我想按顺序在一个列表中映射三个不同的函数.为了证明我的意思,我们想要做以下三个映射:
(map foo mylist)
(map bar mylist)
(map foobar mylist)
Run Code Online (Sandbox Code Playgroud)
如果我们将mylist定义为'(1 2 3),并且我们一次运行一个上述函数,我们得到:
(map foo mylist) ===> (foo1 foo2 foo3)
(map bar mylist) ===> (bar1 bar2 bar3)
(map foobar mylist) ===> (foobar1 foobar2 foobar3)
Run Code Online (Sandbox Code Playgroud)
相反,我希望输出采用以下格式:
===> ((foo1 bar1 foobar1) (foo2 bar2 foobar2) (foo3 bar3 foobar3))
Run Code Online (Sandbox Code Playgroud)
你会怎么做?
你可以嵌套两个maps来达到预期的效果:
(map (lambda (e)
(map (lambda (f) (f e))
myfuncs))
mylist)
Run Code Online (Sandbox Code Playgroud)
以上mylist是输入列表,myfuncs是功能列表.例如,这些列表:
(define myfuncs (list sqrt square cube))
(define mylist '(1 2 3))
Run Code Online (Sandbox Code Playgroud)
...会产生这样的输出:
'((1 1 1) (1.4142135623730951 4 8) (1.7320508075688772 9 27))
Run Code Online (Sandbox Code Playgroud)