我正在尝试创建自己的(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 …

你需要填写的部分。


以上是我正在尝试创建自己的(elem)函数的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>