1年以上のメンタルラングリングの後、私はついにHaskellを十分に理解し、私の一般的なプログラミングニーズの大部分を母国語と見なすことができました。私は絶対にそれが大好きです。
しかし、私はまだ機能的な方法で非常に特定の操作を行うのに苦労しています。
簡単な例:
Set = [("Bob", 10), ("Megan", 7), ("Frank", 2), ("Jane", 11)]
これらのエントリを相互に比較したいと思います。CやPythonのような言語では、おそらく複雑なループを作成しますが、関数型言語でどちらのアプローチ(マップ、フォールド、リスト内包)が最適か、最も効率的かはわかりません。
これが私が取り組み始めたコードのサンプルです:
run xs = [ someAlgorithm (snd x) (snd y) | x <- xs, y <- xs, x /= y ]
述部は、リスト内包がエントリをそれ自体と比較することを防ぎますが、すでに比較されたエントリを比較するため、この関数はあまり効率的ではありません。例えば。ボブとミーガンを比較してから、ミーガンとボブを比較します。
この問題を解決する方法についてのアドバイスをいただければ幸いです。