0

タプルのリストにある場合、タプルの最初の要素が別のタプルと同じである場合、タプルの他の要素も同じでなければならず、そうでない場合は返すことを伝える関数を実行しようとしていますFalse.

main> istup [(1,2,3,4,5),(1,2,3,4,5),(1,4,5,6,2),(4,2,1,5,6)]
>>> False
main> istup [(1,2,3,4,5),(1,2,3,4,5),(4,2,1,5,6),(4,2,1,5,6)]
>>> True

これは私が持っているものです:

type Tuple = (a,b,c,d,e)

istup :: [Tuple] -> Bool
istup x = length (nub x) == length x
4

2 に答える 2

2

説明を Haskell コードとして書き留めるだけです。これらはあなたの条件です:

  • 要素のすべてのペアについて、いくつかの条件を確認したい
  • あなたが条件を定義します
  • 「すべてのペア」の意味を書き留めます。

結果のコードは次のとおりです。

istup :: [(Int,Int,Int,Int,Int)] -> Bool
istup x = all ok (allPairs x)

ok t1 t2 = if fst5 t1 == fst5 t2 then t1 == t2 else True
    where fst5 (a,_,_,_,_) = a

allPairs x = [(a,b) | a <- x , b <- x]
于 2012-12-19T20:18:28.857 に答える
2

タスクをサブタスクに分割しましょう。

1) リストを同じヘッドを持つタプルのリストに分割する必要があります。これは、Data.List.groupBy を使用して行うことができます。これは、2 つの項目を同じサブリストに入れるかどうかを決定する関数を受け取ります。

 import Data.List
 import Data.Function (on)
 splitByHead = groupBy ((==) `on` fst5)    -- the function is same as (\a b -> fst5 a == fst5 b)
    where fst5 (a,_,_,_,_) = a

2) 次に、サブリスト内のすべての項目が等しいかどうかを確認する必要があります ( によって取得される、さまざまな項目のリストの長さを調べて行うことができますnub)。

 allEqual = (1 == ) . length . nub

3)それをまとめる:

 import Data.List
 import Data.Function (on)

 istup = all ((1 == ) . length . nub) . groupBy ((==) `on` (\(a,_,_,_,_) -> a))
于 2012-12-19T20:27:36.500 に答える