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