作爲一個練習,我試圖手動實現前奏的有趣部分。每當我發現一個機會去免費點我拿它。然而,這導致我在最不可能的地方出現了一堵磚牆。使用此代碼:試圖寫一個功能點免費,GHCI不批准
myelem _ [] = False
myelem x y = if x == head y then True else myelem x (tail y)
我試圖實施notElem
。這裏是我的嘗試:
-- First
mynotelem = not myelem
由於類型不匹配,可以理解的爆炸。這很容易固定:
-- Second
mynotelem x y = not (myelem x y)
但是參數x和y的顯式聲明感到醜陋和不必要的,所以我儘量把它放回點自由風格。
-- Third
mynotelem = not $ myelem
從而未能與
Couldn't match expected type `Bool'
with actual type `a0 -> [a0] -> Bool'
In the second argument of `($)', namely `myelem'
In the expression: not $ myelem
In an equation for `mynotelem': mynotelem = not $ myelem
很公平,其種類仍然不匹配。但你如何解決它?再次您可以直接跳到
-- Fourth
mynotelem x y = not $ myelem x y
這是有效的,但似乎危險地接近剛剛進入圈子。我發現有可能消除其中一個論點:
-- Fifth
mynotelem x = not . (myelem x)
但是,討厭的x仍然存在。我如何消除它?
ThelronKnuckle:如果你的避風港已經,搜索SO關於'($)'和'(。)'之間區別的問題 - 我想你會發現這些問題/答案很有幫助。 – 2011-12-28 02:36:42