【发布时间】:2021-12-25 14:45:03
【问题描述】:
我刚刚开始在 Haskell 中编写我的前几个程序,而且我很努力 - 所以请原谅大量的错误。我在网上发现了这个练习题,它要我接受一个列表,一个 int,并返回一个 bool。我应该检查是否在列表中找到 int 并分别返回 true 或 false。 这就是我所拥有的:
import Data.List
elem':: (Eq a) => a -> [a] -> Bool
elem' x [x]
| x == [x:xs] = True
| length [x] == 1 = False
| otherwise = elem' tail [x]
编译器返回
非法类型签名 [...] 类型签名只允许在带有 ScopedTypeVariables 的模式中
我还不能真正理解。我发现有人说使用制表符而不是空格时会发生此错误,但我只使用了空格。我很感激任何建议!
【问题讨论】:
-
除非您使用的是包含单个元素的列表,否则我不会使用
[x]。 -
你为什么缩进
elem' x [x]? -
你的符号很乱。让
x成为元素(针)。让ys成为列表(干草堆)。 -
在很多情况下,当你需要在列表上定义一个函数时,你需要
f [] = ...和f (x:xs) = ...这两个case。尝试遵循该模式elem y [] = ...和elem y (x:xs) = ...。避免使用head,tail,length,[x],[x:xs],因为它们通常会导致您找到错误和/或低效的解决方案。