gpt4 book ai didi

haskell - 使用需要多个输入的过滤器 - Haskell

转载 作者:行者123 更新时间:2023-12-05 08:30:36 29 4
gpt4 key购买 nike

我对 Haskell 比较陌生,过去几周一直在尝试学习它,但一直停留在过滤器和谓词上,我希望能得到帮助以帮助理解。

我遇到了一个问题,我有一个元组列表。每个元组包含一个 (songName, songArtist, saleQty) 并且需要根据用户输入的 songName 和 SongArtist 从该列表中删除一个元组。

当返回结果时,我知道我可以在返回结果时使用 Filter 函数删除一个元组。我一直在使用 LYAH 阅读它。它告诉我必须使用谓词(这是另一个函数)来过滤我的结果。这让我措手不及,因为我了解到 Filter 函数的类型为 (a -> Bool) -> [a] -> [a],这意味着我的输入Filter 需要是一个 bool 值,我的 Predicate 的输出需要是 bool 值,这样它就可以被提供给 Filter

这是一个问题,为了从列表中过滤我的结果我需要在递归遍历结果时将songName和songArtist(均为String类型)输入谓词,并将songName和songArtist输出到Filter 让它知道需要从列表中删除哪个元组。

我是不是以错误的方式解决了这个问题,还是有更好的方法可以解决这个问题?

最佳答案

I learnt a Filter function has type (a -> Bool) -> [a] -> [a]

filter :: (a -> Bool) -> [a] -> [a]接受两个参数,一个带有签名 a -> Boolpredicate 和一个项目列表,它返回满足 predicate 的项目列表。所以谓词是第一个参数。

which means my input for the Filter needs to to be a Boolean.

没有第一个参数的类型是 a -> Bool,所以它是一个将项目 a 映射到 Bool 的函数,所以一个谓词

例如,您可以创建一个函数来检查 songNamesongTitle 是否匹配:

filterSales :: String -> String -> [(String, String, Int)] -> [(String, String, Int)]
filterSales artist title items = filter <b>p</b> items
where <b>p</b> (artist', title', _) = artist == artist' && title == title'

这里 p 因此是谓词,一个将 3 元组映射到 bool 值的函数。如果前两项等于 artisttitle,谓词 p 将为三元组返回 True > 分别。

关于haskell - 使用需要多个输入的过滤器 - Haskell,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63288166/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com