myElement [] = []
myElement [h] = [h]
myElement (h:t)
| h == myElement t = True
| otherwise = False
大家好,我正在努力创建自己的 elem
函数,因为我不允许在 Haskell 中使用任何预定义的函数来做作业。我敢打赌我的代码实际上不起作用,但我想不出其他方式。
答案 0 :(得分:5)
主要问题是您的函数只能使用一个参数,而 elem
将使用两个参数:needle(我们正在寻找)和 haystack< /em>.
这意味着 myElem
的类型为:
myElem :: Eq a => a -> [a] -> Bool
另一个问题是 myElem [h] = [h]
没有多大意义,如果你有一个包含一个元素的列表,你不应该返回那个元素,但是你应该,就像每个子句一样,返回一个 Bool
。
至于最后一个子句,如果h
不是我们要找的元素,我们需要使用递归来寻找剩余的大海捞针。
该函数如下所示:
myElem :: Eq a => a -> [a] -> Bool
myElem x = go
where go [] = … a Bool …
go (h:t)
| x == h = …
| otherwise = … recursive call …
您需要填写 …
部分的地方。