我为自己感到骄傲! ^ _ ^
我终于可以编写有效的Haskell函数了!
:: [String] -> [String]
lowerCase = nub.map (map toLower)
returnLowers = nub.map (filter isLower)
使用 words 函数将用户的输入拆分为列表后,我的 lowerCase 函数会降低用户的输入(这将使单词/更容易模式匹配,我想在稍后的程序中执行),我的 returnLowers 函数过滤并仅返回小写字母以删除任何符号,数字等。
但是我注意到这两个函数都使用了 nub.map ,我想知道是否有一种方法可以将这两个函数组合成一个超级函数来从代码中删除冗余。
我们将不胜感激。
答案 0 :(得分:4)
您可以定义
nubMap f = nub . map f
然后
lowerCase = nubMap (map toLower)
returnLowers = nubMap (filter isLower)
但我没有看到任何优势;你现在拥有的东西看起来很好。重复是最小的,部分是虚幻的:两个函数实际上都不使用nub.map
,它们对某些nub . map f
使用f
。这似乎是一个迂腐点,但你不能定义foo = nub.map
,然后用它定义两个函数(它实际上是一个类型错误)。特别是,nub.map f
实际上是nub . (map f)
,而不是(nub . map) f
。