考虑以下问题:给定长度为三个元组 (String,Int) 的列表,是否存在一对具有相同“Int”部分的元素?(例如,[("bob",5),("gertrude",3),("al",5)]
包含这样的一对,但[("bob",5),("gertrude",3),("al",1)]
不包含。)
这就是我将如何实现这样的功能:
import Data.List (sortBy)
import Data.Function (on)
hasPair::[(String,Int)]->Bool
hasPair = napkin . sortBy (compare `on` snd)
where napkin [(_, a),(_, b),(_, c)] | a == b = True
| b == c = True
| otherwise = False
我已经使用模式匹配将名称绑定到元组的“Int”部分,但我想先排序(以便对类似成员进行分组),所以我将模式匹配函数放在了一个where
子句中。但这让我想到了我的问题:为存在于子句中的函数选择名称的好策略是什么where
?我希望能够快速想出这样的名字。对于这个例子,“hasPair”似乎是一个不错的选择,但它已经被采用了!我发现这种模式出现了很多 - 辅助函数的看似自然的名称已经被调用它的外部函数采用。因此,有时我将此类辅助函数称为“op”、“foo”甚至“helper”——在这里我选择了“napkin”来强调它的一次性使用,
那么,亲爱的 Stackoverflow 读者,你会怎么称呼“餐巾纸”?更重要的是,您一般如何处理这个问题?