我正在尝试创建自己的(elem)函数

时间:2021-07-03 08:11:54

标签: list haskell search

myElement [] = []
myElement [h] = [h]
myElement (h:t)
| h == myElement t  = True
| otherwise         = False

大家好,我正在努力创建自己的 elem 函数,因为我不允许在 Haskell 中使用任何预定义的函数来做作业。我敢打赌我的代码实际上不起作用,但我想不出其他方式。

1 个答案:

答案 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 …

您需要填写 部分的地方。