首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Haskell缩进错误。初级水平

Haskell缩进错误。初级水平
EN

Stack Overflow用户
提问于 2013-01-23 14:42:06
回答 2查看 385关注 0票数 0

我正在上一门介绍Haskell的课程。我对这门语言完全不熟悉。

当我编译它时,它说:

代码语言:javascript
复制
[1 of 1] Compiling Main             ( hw1.hs, interpreted )
hw1.hs:11:1: parse error (possibly incorrect indentation)
Failed, modules loaded: none.

谁能解释一下我做错了什么?非常感谢。

附注:我从网上得到了一小段代码(称为素数)。我不理解那些代码,如果有人能详细说明一下,那就太好了。我不明白sieve这个函数是做什么的。它是一个内置的haskell函数吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-23 16:40:54

除了@ertes所说的关于反标记之外,还有更多的错误。幸运的是,其中两个很容易修复!

首先,应该删除let num = [1..]中的let:在.hs文件中不需要这些(但在GHCi中需要,一开始可能会混淆)。这就是产生缩进错误的原因。一旦你修复了这个问题,你就会得到一些类型错误。

其次,在partCpartD中,您可以编写t <- [zip num fibs/primes]。这意味着t依次绑定到单元素列表[zip num ...]的每个元素。zip num fibs/primes已经是一个列表了,所以你不需要括号。修复这个问题后,程序会编译,但不能正常工作。

最后,如果您试图通过检查一个数字(在您的例子中是fst t,也是在partCpartD中)是质数还是斐波那契数来确定它是primes还是fibs的元素,当该数实际上在列表中时,它就会工作,但如果不是,它就不会返回False。这是因为elem并不“知道”你正在浏览的列表是按升序排列的。例如,如果你尝试计算elem 4 primes,它将检查4是否等于2,3,5,7,11,以此类推-谁知道,最终可能会出现4!要解决这个问题,您必须编写一个稍微智能一点的elem-like函数。

票数 8
EN

Stack Overflow用户

发布于 2013-01-23 14:54:07

您刚刚混淆了第11行中的撇号和反引号:

代码语言:javascript
复制
fst t 'elem' primes

应该是:

代码语言:javascript
复制
fst t `elem` primes
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14473884

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档