私はまだハスケルに新しいといくつかのことをしようとしています。私はピタゴラスのトリプルがいっぱいのリストを持っています。今私はすべての同一のトリプルを削除したい。たとえば(6,8,10)は(3,4,5)と同じ方法です。だから私は、2つの3タプルが同じかどうかをチェックする関数を書いた。同じであればTrue
を返し、そうでなければFalse
を返す。しかし今、私は3つのタプルのリストを持っています(そのうち3つのタプルは同じです)、すべて同じ3つのタプルを除外したいと思います。私はStackOverflowで同じ問題を探していましたが、悲しいことに私が使うことができるものは見つかりませんでした。ハスケルフィルタ(3タプル)リスト自体がリスト
私の現在のコードは以下の通りです。 (。私は、現時点では非常に非効率的なことをやっていると確信しているので、効率を気にしないでください)
トリプルのリストを生成:
pyth :: Int -> [(Int, Int, Int)]
pyth i = [(a, b, c) | a <- [1..i], b <- [1..a], c <- [1..i], (a^2) + (b^2) == (c^2)]
一部の機能3タプルでの作業を支援するために:
first :: (Int, Int, Int) -> Int
first (a,_,_) = a
second :: (Int, Int, Int) -> Int
second (_,a,_) = a
third :: (Int, Int, Int) -> Int
third (_,_,a) = a
2つのトリプルが同一であるかどうチェック機能:
doubleCheck :: (Int, Int, Int) -> (Int, Int, Int) -> Bool
doubleCheck a b
| (((first b) `div` (first a)) == ((second b) `div` (second a))) &&
((first b) `mod` (first a) == 0) &&
((second b) `mod` (second a) == 0) = True
| otherwise = False
今ウィットh私がHaskellについて聞いて読んだことと、高次関数の力は、2行のコードや何かのようなものになると思います。しかし、私は一日のようにこれに固執しており、この問題の解決方法を理解することはできません。
ありがとうございます!
['Data.List.nub'](https://hackage.haskell.org/package/base-4.9.1.0/docs/Data-List.html#v:nub)と[' nubBy']を参照してください。 (https://hackage.haskell.org/package/base-4.9.1.0/docs/Data-List.html#v:nubBy)重複を取り除くため – luqui