【发布时间】:2014-11-08 01:00:58
【问题描述】:
试图弄清楚为什么这不会编译?我刚刚发布了一个关于 haskell 的 'where' 语法的类似问题。
primeFactors :: Int -> [Int]
primeFactors x = genPrimes x []
where
genPrimes x xs
|x == 0 = []
|isPrime x = x : genPrimes (x - 1) xs
|otherwise = genPrimes (x - 1) xs
输入“|”时出现解析错误
'isPrime' 函数在这里定义,并且具有相似的结构和功能,'primeFactors' 的语法问题是什么?
isPrime :: Int -> Bool
isPrime a = go a (a - 1)
where
go a b
|a == 1 || b == 1 = True
|a `mod` b == 0 = False
|otherwise = go a (b - 1)
谢谢。
【问题讨论】:
-
我最好的猜测是你的缩进不匹配。检查您没有混合使用制表符和空格。
-
我现在看不到问题 - 你有标签吗? - 顺便说一句:我不认为你的
primeFactors工作正常 -primeFactors 5会返回[5,3,2],你永远不会将内部的xs更改为与[]不同的任何东西,... -
问题已解决,谢谢!
-
我想提醒大家,您可以通过在OP上打开一个编辑窗口来查看是否有标签。尽管在这种情况下并不能准确地确定问题出在哪里 - 缩进在发布时一定会变得更加混乱。通过以制表符或 4 个空格开始每一行来指示 SO 的代码块这一事实对此无济于事。