Помислете за следния проблем: даден списък с дължина три от кортежи (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" изглежда като добър избор, но вече е зает! Намирам, че този модел се появява често - естествено изглеждащото име за помощна функция вече е взето от външната функция, която я извиква. Така че понякога съм наричал такива помощни функции неща като "оп", "фу" и дори "помощник" - тук избрах "салфетка", за да подчертая нейната употреба веднъж, изхвърляне.
И така, скъпи читатели на Stackoverflow, какво бихте нарекли „салфетка“? И което е по-важно, как подхождате към този въпрос като цяло?
go
е пътят :) - person Riccardo T.   schedule 24.05.2012napkin
, както е написано в момента, не е много стабилно (списъкът трябва да има точно три члена), ако помислите малко повече, може би ще предложи по-добро име. - person stephen tetley   schedule 24.05.2012napkin
, докато го пишех. Бихте ли казали, че това е вярно като цяло: ако ви е трудно да наименувате функция, вашият дизайн вероятно има нужда от подобрение? Ако е вярно, това е доста мощна концепция... - person gcbenison   schedule 24.05.2012hasPair
ще работи за името на помощната функция. Въпреки това много хора обикновено смятат скриването на външни обвързвания за вредно. - person gcbenison   schedule 27.05.2012