2

私はHaskellで(Spojで)いくつかの問題を試していますが、フォームを入力したかなりの数の問題に遭遇しました:

testcase_1
testcase_1_continued
testcase_2 
testcase_2_continued

また

testcase_1 testcase_1_continued
...

ご覧のとおり、入力wordsまたはlines入力を使用してソルバー関数をマッピングするだけでは、これを解決することはできません。

[solver test1, solver test2, ...]

2つの引数を持つ関数を使用する必要があります。これらは2つのリスト要素であり、次々に取得されます。

[solver test1 test1continued, solver test2 test2continued, ...]

だから、一度に関数2の引数を適用する類似の関数を見つけてmapうれしいです。Hoogleでは何も見つかりませんでしたが、そのような関数を簡単に書くことができますが、もっと探しています問題への一般的なアプローチまたは、(主張する)私のアプローチmapが間違いなく間違っている場合は、正しい方向を示すこともできます。

編集:

関数をリストにマップする関数map2を実装すると、実際には非常に便利であることがわかりました。一度に2つの引数しか機能しません。

map2 f [a,b,c,d] ==> [f a b, f c d]
4

2 に答える 2

7

chunksOfを使用します。

> map (\[x, y] -> x + y) . chunksOf 2 $ [1..30]
[3,7,11,15,19,23,27,31,35,39,43,47,51,55,59]
于 2012-04-21T17:06:11.037 に答える
3

mapデータがそのように構造化されている場合は、セマンティクスに合わせて少し変更することをお勧めします。これを行う 1 つの方法は、 の結果を「ペアにする」ことでlines、 が得られます[(line1, line2),(line3, line4),...]。map の最初の引数は、これらのタプルで機能する関数になります。

編集: それを拡張するための一般的なアプローチは、入力を読み取り、それを意味的に意味のある形式にフォーマットしてから、解法関数を結果にマップまたは折り畳むことです。正確な解は、入力データによって異なります。

于 2012-04-21T16:47:28.943 に答える