Data.List bölümünde ~ (tembel desen eşleşmesi) kullanmanın performans yararları nelerdir. Tembel desen eşleştirmesinin zoraki örnekleri, tuple yapıcısı içindeki değerlerin hiç kullanılmadığında yararlı olduğunu göstermektedir (f (x, y) = 1). Bölümde (aşağıda, aşağıda), ts, fs listelerinin her zaman kullanılır (x'ye uygulanan p değeri Doğruysa veya olmasın). Eminim bu çok iyi bilgilendirilmiş bir karardır ~, ama ne anlamı var? Neden sıkı eşleme uymuyorsunuz?Data.List içinde Tembel Kalıp eşleşmesiList
partition :: (a -> Bool) -> [a] -> ([a],[a])
{-# INLINE partition #-}
partition p xs = foldr (select p) ([],[]) xs
select :: (a -> Bool) -> a -> ([a], [a]) -> ([a], [a])
select p x ~(ts,fs) | p x = (x:ts,fs)
| otherwise = (ts, x:fs)
(Not: Zaten here baktım yukarıdaki soruya cevap vermez!)
cf. http://en.wikipedia.org/wiki/Tail_call#Tail_recursion_modulo_cons –