0

我正在上一门介绍 Haskell 的课程。我对这种语言完全陌生。

当我编译它时,它说:

[1 of 1] Compiling Main             ( hw1.hs, interpreted )
hw1.hs:11:1: parse error (possibly incorrect indentation)
Failed, modules loaded: none.

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

ps 我从网上得到了一段代码(称为素数)。我不明白该代码,如果有人可以详细说明,那就太好了。我不明白筛子的功能是什么。它是内置的haskell函数吗?

4

2 回答 2

8

除了@ertes 所说的反引号之外,还有一些问题。幸运的是,其中两个很容易修复!

首先,let应该let num = [1..]删除 in:在 .hs 文件中你不需要这些(但你在 GHCi 中需要,一开始可能会令人困惑)。这就是给你缩进错误的原因。一旦你解决了这个问题,你会得到一些类型错误。

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

最后,如果您尝试通过检查它是否是 or 的元素来确定一个数字(在您的情况下,再次在 and 中)是素数还是斐波那契数,这fst tpartC在该数字实际在列表中时起作用,但它不会如果不是,请返回。这是因为不“知道”您正在查看的列表是按升序排序的。例如,如果您尝试评估,它将检查 4 是否等于 2、3、5、7、11,等等 - 谁知道,最终可能会出现 4!要解决这个问题,您必须编写一个稍微更智能的函数。partDprimesfibsFalseelemelem 4 primeselem

于 2013-01-23T08:40:53.890 回答
7

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

fst t 'elem' primes

应该:

fst t `elem` primes
于 2013-01-23T06:54:07.130 回答