1

3 つの異なる関数を 1 つのリストに順番にマップしたいと思います。私が言いたいことを示すために、次の 3 つのマッピングを行いたいとします。

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

mylist を として定義し'(1 2 3)、上記の関数を 1 つずつ実行すると、次のようになります。

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

これについてどう思いますか?

4

1 に答える 1

6

map目的の効果を得るために、2 つの をネストできます。

(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))
于 2013-10-02T20:04:57.630 に答える