我正在研究一个非常复杂(至少对我来说很复杂)的函数,我想用它来计算列表中的单词与数据库中的单词对应的次数。
使用随机词的示例:
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 计算数据库条目在输入中出现的次数。我正在使用 fold 进行更好的实现。
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)])