我正在上一门介绍Haskell的课程。我对这门语言完全不熟悉。
当我编译它时,它说:
[1 of 1] Compiling Main ( hw1.hs, interpreted )
hw1.hs:11:1: parse error (possibly incorrect indentation)
Failed, modules loaded: none.谁能解释一下我做错了什么?非常感谢。
附注:我从网上得到了一小段代码(称为素数)。我不理解那些代码,如果有人能详细说明一下,那就太好了。我不明白sieve这个函数是做什么的。它是一个内置的haskell函数吗?
发布于 2013-01-23 16:40:54
除了@ertes所说的关于反标记之外,还有更多的错误。幸运的是,其中两个很容易修复!
首先,应该删除let num = [1..]中的let:在.hs文件中不需要这些(但在GHCi中需要,一开始可能会混淆)。这就是产生缩进错误的原因。一旦你修复了这个问题,你就会得到一些类型错误。
其次,在partC和partD中,您可以编写t <- [zip num fibs/primes]。这意味着t依次绑定到单元素列表[zip num ...]的每个元素。zip num fibs/primes已经是一个列表了,所以你不需要括号。修复这个问题后,程序会编译,但不能正常工作。
最后,如果您试图通过检查一个数字(在您的例子中是fst t,也是在partC和partD中)是质数还是斐波那契数来确定它是primes还是fibs的元素,当该数实际上在列表中时,它就会工作,但如果不是,它就不会返回False。这是因为elem并不“知道”你正在浏览的列表是按升序排列的。例如,如果你尝试计算elem 4 primes,它将检查4是否等于2,3,5,7,11,以此类推-谁知道,最终可能会出现4!要解决这个问题,您必须编写一个稍微智能一点的elem-like函数。
发布于 2013-01-23 14:54:07
您刚刚混淆了第11行中的撇号和反引号:
fst t 'elem' primes应该是:
fst t `elem` primeshttps://stackoverflow.com/questions/14473884
复制相似问题