2

私には機能があります

f :: Int -> Int -> Int

そして、私は任意の長さのリストを持っていますが、例のために:

[x1,x2,x3]

結果のリストが次のようになるように、 f をリストに適用する必要があります。

[f x1 x1 + f x1 x2 + f x1 x3 , f x2 x1 + f x2 x2 + f x2 x3 , f x3 x1 + f x3 x2 + f x3 x3]

そんなこと知ってる

map f [x1,x2,x3] will give [f x1, f x2, f x3]

しかし、これはここではあまり役に立たないようです。それを行う最良の方法は何ですか?

4

3 に答える 3

4

リスト内包表記を使用して、ghci の下で次の式を試してみてください。

fun f xs = map sum [[ f x y | y <- xs] |  x <- xs]
于 2013-03-30T10:49:04.863 に答える
2

Applicative functor を使用して、次のように実行できます。

import Control.Applicative
let l = ["a", "b", "c"]
(++) <$> l <*> l

それが返され["aa","ab","ac","ba","bb","bc","ca","cb","cc"]ます。

もう少し説明すると、のすべての要素に(++) <$> l関数がマップされ、 が返されます。次に、 usingは、これらすべての関数を のすべての要素に適用します。(++)l[("a"++), ("b"++), ("c"++)]<*>l

詳細については、アプリケーション ファンクターに関するドキュメントを参照してください。http://www.haskell.org/ghc/docs/latest/html/libraries/base/Control-Applicative.html

于 2013-03-30T13:02:41.493 に答える