2013-02-12 49 views
0

我寫所謂myElems哈斯克爾功能是比較兩個列表

即取值的兩個列表,如果在 第一列表中的所有值都在第二個列表返回true哈斯克爾功能的項目。例如,myElems "db" "abcd"應返回true,而myElems [1,2] [0,1,3,4]應返回false

myElem功能是這樣

myElem n [] = False 
myElem n (x:xs) = if n == x then True else myElem n xs 

此功能工作得很好,但是當我試圖把它應用到myElems函數具有這種形式

myElems xs [] = False 
myElems [] ys = False 
myElems (x:xs) (y:ys) = if myElem y xs /= myElem x ys then False else myElems (tail xs) (tail ys) 

不會在所有的工作。

+0

爲什麼downvotes? – drozzy 2013-02-12 03:49:39

+3

這是一個微不足道的家庭作業問題,雖然OP發佈了他試圖解決的問題,但他顯然沒有花時間思考*爲什麼*它不起作用。看看他的第二行:'myElems [] ys = False'。如果他想到這件事,他會發現公然的邏輯錯誤;甚至在第三行發現廢話之前。 – Quuxplusone 2013-02-12 04:20:34

回答

2

你的意思是

myElems [] ys = True 
myElems (x:xs) ys = if myElem x ys then myElems xs ys else False 
+0

This Works!謝謝你的幫助 – user2020331 2013-02-12 04:09:21

+2

@Quuxplusone - 你的診斷是正確的,但是你會給「不要思考,所以用戶會很樂意做你的功課」藥嗎?例如,詢問:如果myElem [] xs是False,那麼第一個列表中不在第二個列表中的元素是什麼? – Ingo 2013-02-12 09:38:46

2

我知道這是不是確切的答案,但究竟什麼Learn You Haskell書建議:

import qualified Data.Set as Set 
Set.fromList [2,3,4] `Set.isSubsetOf` Set.fromList [1,2,3,4,5]