2012-02-12 33 views
1

我爲自己感到驕傲!^_^Haskell的小寫輸入和刪除1個函數中的符號

我終於可以編寫Haskell函數了!

:: [String] -> [String] 
lowerCase = nub.map (map toLower) 
returnLowers = nub.map (filter isLower) 

用戶的輸入使用功能分割成一個列表後,我小寫功能較低的情況下,用戶的輸入(這將使它更容易匹配,我想這個詞/模式後來在節目中做的),和我的returnLowers功能的過濾器和返回只有小寫字母,以消除任何符號,數字等

但是我注意到這兩個功能使用nub.map和我想知道我是否有辦法可以將這兩個函數組合成1個超級函數來消除代碼中的冗餘。

您的幫助,將不勝感激。

+0

'nub.map'不檢查。你的第一個函數實際上是'(nub。(map(map toLower)))'。你確定你知道'nub'的作用嗎? – 2012-02-12 22:19:43

+0

我知道結點是什麼。這是一種我爲地圖功能「組成」的相等功能。我只是想知道是否有更好的/更「Haskelly」的方式來做我所做的事情。 – 2012-02-12 22:25:07

回答

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

+0

我認爲可能有一個更專業的方式來做這些功能與列表理解或什麼。但如果我採取的方法不冒犯任何人,並且被認爲是好的,那麼對我來說也沒問題。再次感謝你的幫助。 – 2012-02-12 22:30:00

+3

實際上,您使用的無點式風格通常被認爲比列表理解更習慣。我唯一的建議是在'.'周圍增加空格。 – ehird 2012-02-12 22:41:08