リスト内の単語がデータベース内の単語に対応する回数をカウントするために使用したい、かなり複雑な (少なくとも私にとっては複雑な) 関数に取り組んでいます。
ランダムな単語を使用した例:
let input = [("InputName", ["dog", "cat", "cat"...]), ...]
let database = ["dog", "cat", "badger"...]
数時間頭の体操をした後、私はこの恐ろしい機能を思いつきました。この例のコンテキストで意味があるように、単純化しました。
findMatches input database = [ (snd x, wordCount (snd x)) | x <- input ]
where
wordCount ys = sum[ if y `elem` database then 1 else 0 | y <- ys ]
私の目標、私の希望、私の願いは、次のような出力を得ることです。
[("dog", 1), ("cat", 2), ("badger", 0)]
正しい方向への提案やナッジをいただければ幸いです。
編集
私はついに機能する関数を作りました。catWordCount は、データベース エントリが入力に現れる回数をカウントします。フォールドを使用したより良い実装に取り組んでいます。
let input = words "5 4 10 0 1 9 1"
let database = [("C1", words "1 2 3 4 5"), ("C2", words "6 7 8 9 10")]
catwordCount input database
catWordCount fs zs = [ (fst f, inputSearch (snd f)) | f <- fs ]
where
inputSearch gs = [ (g, wordCount [g]) | g <- gs ]
wordCount hs = sum[ if h == z then 1 else 0 | h <- hs, z <- zs ]
そして出力:
(["C1", [("1",2),("2",0),("3",0),("4",1),("5",1)])
(["C2", [("6",0),("7",0),("8",0),("9",1),("10",1)])