【发布时间】:2018-07-13 09:25:06
【问题描述】:
我是 haskell 的新手,在 '=' 上遇到输入解析错误 我正在尝试一个函数来检查一个数字是否是素数 这是功能 -
isprime x
| x<=1 = "not prime"
| x == 2 = "yes"
| a = floor (sqrt x)
lis = [2..a]
divbylis (headlis:taillis)
| length taillis <=0 = "yes it is prime"
| x 'mod' headlis == 0 = "No not prime"
| otherwise = divbylis taillis**
它显示错误 -
first.hs:58:15: error:
parse error on input ‘=’
Perhaps you need a 'let' in a 'do' block?
e.g. 'let x = 5' instead of 'x = 5'
第 58 行是声明 lis = [2..a]** 的行
【问题讨论】:
-
你写
a = floor (sqrt 5),这是没有意义的,因为 Haskell 需要一个守卫。 -
你是不是想在某个地方设置一个
where块? -
| a = floor (sqrt x)行很奇怪 - 是什么?我认为您打算在该行的末尾写一个where,但这并不能解决您在这里遇到的问题。 -
只使用检查素数的通用代码,创建一个从2到sqrt的数字列表并除以每个数字
-
@jatin:但您所做的是将命令式样式 代码用于函数式/声明式语言。 Haskell 背后的想法之一是摆脱这种命令式方法。
标签: haskell