提案された複製がこれのほとんどに答えているので、あなたのフォローアップのコメントに質問に焦点を当てます。
1)なぜ固定するための標準的な実装がn = 2
zipWith
2つの引数のためであり、repeat
は0引数のためのものです。これは任意のジタルを得るのに十分です。例えば、(またmap
呼ばれる)1つの引数バージョンはそうで
zipWith3 f = (.) (zipWith ($)) . zipWith f
として
map f = zipWith ($) (repeat f)
および3引数バージョンとして実装することができます。より大きなzipの実装にはかなりのパターンがあります(この小さなサンプルサイズからはっきりと分かりません)。この結果は、0-aryおよび2-ary製品のカテゴリにすべての主要製品が含まれているというCTの結果と似ています。
答えの残りの半分は、タイプ・レベルの数値(任意のジタル・ジップの最も頻繁な実装手法)は可能ですが使用するのは面倒ですが、それらを避けると、およびタイプレベルのノイズが含まれます。
2)私はリストの数を渡す必要があり、それは
使用ZipList
扱いにくいです。あなたはリストの数を渡す必要はありません(リストごとに1つの中置演算子を書く必要がありますが、非常に軽い要件ですが、Pythonでも各リストの間にカンマが必要です)。
経験的に:私はそれを「扱いにくい」とラベル付けするような一般的な必要性のような恣意的なジップを見つけられませんでした。
3)私自身のジップを定義しても、Prelude.zipとの衝突が発生します。
だから別の名前を選んでください...?型シグネチャが異なることになるので
https://stackoverflow.com/questions/2468226/how-to-zip-multiple-lists-in-haskell https://stackoverflow.com/questions/39991581/how-can-i-implement-generalized- zipn-and-unzipn-in-haskell https://stackoverflow.com/questions/40342060/convert-a-tuple-of-lists-of-the-same-length-to-a-list-of-tuples-for -arbitrary –
https://stackoverflow.com/questions/7828072/how-does-haskell-printf-work –
@JoshLeeリンクに感謝します。秒は1に近づきますが、敷居は私に多くの苦難を残します1)固定n = 2の標準実装はなぜですか2)リストの数を渡す必要があります、それは扱いにくい3)自分のzipを定義してもPrelude.zipとの衝突が発生します。 – Vorac