タプルの2つのリストが等しいことを確認して結合する方法をhaskell

すぐに

私はHaskellの新しいセルフリーナーです。まず、タプルの2つのリストが等しいかどうかをチェックする関数を作成します。各タプルにはキーと値があります

次に、タプルの2つのリストを結合する関数が必要です

私はいくつかの方法を試し、何度も試しましたが、私の要件を満たすことができなかったようです。誰かが私を助けることができますか?前もって感謝します。

JonasDuregård

私の提案:2つのリストから結合されたキーを抽出する関数から始めます。

allKeys :: Eq a => Lis a -> Lis a -> [a]

そうallKeys [('a',2),('b',2),('c',3)] [('b',2),('a',1),('d',3)]です['a','b','c','d']ヒント:両方のリストからすべてのキーを抽出し、それらを1つのリストにマージしてから、そのリストから重複を削除します(これらすべてのタスクには標準機能があります)。

この関数は、等式のチェックと合計の計算の両方に役立ちます。

  • 等しいかどうかを確認するには、最初のリストで各キーを検索すると、2番目のリストで検索した場合と同じ結果が得られることを確認します。
  • 合計を計算するには、すべてのキーを両方の元のリストのルックアップの合計とペアにするだけです。

考慮すべきことの1つ:リスト[('a',0)]は同じである必要があり[]ますか?それ以外の場合は、最初のケースと2番目のケースでキー「a」を返しMaybe Int、与えるルックアップ関数を使用する必要がありますJust 0Nothing

これが宿題ではない場合はお知らせください。コードを提供できます。

編集:コード!:)

以下のコードは、私が通常書く方法に比べて少し単純化されていますが、それほどではありません。Data.Listからインポートされるnub(重複を削除するため)など、なじみのないライブラリ関数がおそらくいくつかあります。

import Data.List(nub)

type Times = Int
type Lis a = [(a,Times)] 

count :: Eq a => Lis a -> a -> Times
count xs x = case lookup x xs of
  Nothing -> 0 -- x is not in the list
  Just n  -> n -- x is in the list associated with n

-- Extract all keys by taking the first value in each pair
keys :: Lis a -> [a]
keys xs = map fst xs 

-- Extract the union of all keys of two lists
allKeys :: Eq a => Lis a -> Lis a -> [a]
allKeys xs ys = nub (keys xs ++ keys ys)

lisEquals :: Eq a=> Lis a -> Lis a -> Bool
lisEquals xs ys = all test (allKeys xs ys) 
  where
    -- Check that a key maps to the same value in both lists
    test k = count xs k == count ys k

lisSum :: Eq a => Lis a -> Lis a -> Lis a
lisSum xs ys = map countBoth (allKeys xs ys)
  where
    -- Build a new list element from a key
    countBoth k = (k,count xs k + count ys k)

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Haskellで2つのファイルが等しいことを確認する方法

分類Dev

.regスクリプトで行ったことを元に戻す方法は?(タイトルがわかりにくい場合があるので、この投稿の内容を確認してください)

分類Dev

リストに別のリストに存在するすべてのタイプの要素が含まれていることを確認してください

分類Dev

他のすべての要素が変更されていないことを確認しながら、リスト内の要素をスキップする方法

分類Dev

長いリストのn番目の要素ごとに、長さが異なる2つのリストをタプルに結合します

分類Dev

2つのgolangリストを比較してすべての要素が一意であることを確認する方法

分類Dev

2つのテーブルを結合して、顧客が開いている未解決のインシデントの数を確認します

分類Dev

タプルのItem2の2つのリストが同様の値を持っているかどうかを確認する方法は?

分類Dev

異なるタイプの2つのベクトルが等しいかどうかを確認する方法

分類Dev

2つのタイムスタンプ間の範囲が他の2つのタイムスタンプと重複していないことを確認する方法

分類Dev

Nが特定のリストにある他の2つの数値の合計として表現できるかどうかを確認する方法

分類Dev

スクリプトタグが本文の最初のタグとして含まれていることを確認しますか?

分類Dev

リストのすべての要素が等しいことを確認します

分類Dev

bashスクリプトで少なくとも2つの引数が指定されていることを確認してください

分類Dev

エラーがない場合にJMeterスクリプトが機能していることを確認するためのヒント

分類Dev

変数がリストであり、このリスト内のデータ型がすべて整数であることを確認する方法は、そうでない場合はそれに応じて例外をスローしますか?

分類Dev

日付が2つの日付の間にあることを確認してください:タイムスタンプ(ミリ秒)

分類Dev

bashスクリプトにディレクトリである2つの引数があることを確認してください

分類Dev

ストアドプロシージャ| 3つのテーブルの結合を使用してIFが存在するかどうかを確認し、更新します

分類Dev

オブジェクトクラスPythonを作成するときに、ユーザーが正しいタイプ(私の場合はリスト)を入力していることをどのように確認しますか

分類Dev

春のデータjpa:結果タプルにエイリアスが見つかりません!クエリでエイリアスが定義されていることを確認してください

分類Dev

春のデータjpa:結果タプルにエイリアスが見つかりません!クエリでエイリアスが定義されていることを確認してください

分類Dev

Playコアライブラリを使用して、GooglePlay以外のアプリがインストールされていることを確認します

分類Dev

2つの要素が同じリストに属しているかどうかを確認する方法

分類Dev

シンボリックリンクのターゲットが特定のパスを指していることを確認する方法

分類Dev

C#を使用してPowerShellスクリプトが実行されていることを確認する方法

分類Dev

共用体タイプがインターフェースの1つに属していることを確認する方法は?

分類Dev

bashスクリプトを介してファイルが存在することを確認する方法は?

分類Dev

2つのリストに等しい要素Haskellがあるかどうかを確認する

Related 関連記事

  1. 1

    Haskellで2つのファイルが等しいことを確認する方法

  2. 2

    .regスクリプトで行ったことを元に戻す方法は?(タイトルがわかりにくい場合があるので、この投稿の内容を確認してください)

  3. 3

    リストに別のリストに存在するすべてのタイプの要素が含まれていることを確認してください

  4. 4

    他のすべての要素が変更されていないことを確認しながら、リスト内の要素をスキップする方法

  5. 5

    長いリストのn番目の要素ごとに、長さが異なる2つのリストをタプルに結合します

  6. 6

    2つのgolangリストを比較してすべての要素が一意であることを確認する方法

  7. 7

    2つのテーブルを結合して、顧客が開いている未解決のインシデントの数を確認します

  8. 8

    タプルのItem2の2つのリストが同様の値を持っているかどうかを確認する方法は?

  9. 9

    異なるタイプの2つのベクトルが等しいかどうかを確認する方法

  10. 10

    2つのタイムスタンプ間の範囲が他の2つのタイムスタンプと重複していないことを確認する方法

  11. 11

    Nが特定のリストにある他の2つの数値の合計として表現できるかどうかを確認する方法

  12. 12

    スクリプトタグが本文の最初のタグとして含まれていることを確認しますか?

  13. 13

    リストのすべての要素が等しいことを確認します

  14. 14

    bashスクリプトで少なくとも2つの引数が指定されていることを確認してください

  15. 15

    エラーがない場合にJMeterスクリプトが機能していることを確認するためのヒント

  16. 16

    変数がリストであり、このリスト内のデータ型がすべて整数であることを確認する方法は、そうでない場合はそれに応じて例外をスローしますか?

  17. 17

    日付が2つの日付の間にあることを確認してください:タイムスタンプ(ミリ秒)

  18. 18

    bashスクリプトにディレクトリである2つの引数があることを確認してください

  19. 19

    ストアドプロシージャ| 3つのテーブルの結合を使用してIFが存在するかどうかを確認し、更新します

  20. 20

    オブジェクトクラスPythonを作成するときに、ユーザーが正しいタイプ(私の場合はリスト)を入力していることをどのように確認しますか

  21. 21

    春のデータjpa:結果タプルにエイリアスが見つかりません!クエリでエイリアスが定義されていることを確認してください

  22. 22

    春のデータjpa:結果タプルにエイリアスが見つかりません!クエリでエイリアスが定義されていることを確認してください

  23. 23

    Playコアライブラリを使用して、GooglePlay以外のアプリがインストールされていることを確認します

  24. 24

    2つの要素が同じリストに属しているかどうかを確認する方法

  25. 25

    シンボリックリンクのターゲットが特定のパスを指していることを確認する方法

  26. 26

    C#を使用してPowerShellスクリプトが実行されていることを確認する方法

  27. 27

    共用体タイプがインターフェースの1つに属していることを確認する方法は?

  28. 28

    bashスクリプトを介してファイルが存在することを確認する方法は?

  29. 29

    2つのリストに等しい要素Haskellがあるかどうかを確認する

ホットタグ

アーカイブ