Haskell-定义在';其中';
我刚开始自学哈斯克尔。此代码应该执行素因子分解:Haskell-定义在';其中';,haskell,where-clause,parse-error,Haskell,Where Clause,Parse Error,我刚开始自学哈斯克尔。此代码应该执行素因子分解: divides :: Integer -> Integer -> Bool divides small big = (big `mod` small == 0) lowestDivisor :: Integer -> Integer lowestDivisor n = lowestDivisorHelper 2 n where lowestDivisorHelper m n | (m `divides`
divides :: Integer -> Integer -> Bool
divides small big = (big `mod` small == 0)
lowestDivisor :: Integer -> Integer
lowestDivisor n = lowestDivisorHelper 2 n
where lowestDivisorHelper m n
| (m `divides` n) = m -- these should belong to lowestDivisorHelper
| otherwise = lowestDivisorHelper (m+1) n
primeFactors :: Integer -> [Integer]
primeFactors 1 = []
primeFactors n
| n < 1 = error "Must be positive"
| otherwise = let m = lowestDivisor n
in m:primeFactors (n/m)
divides::Integer->Integer->Bool
除以小的大的=(大的'mod'small==0)
最小除数::整数->整数
lowestDivisor n=lowestDivisor辅助对象2 n
其中最低除数m n
|(m`divides`n)=m--它们应该属于最低的除数帮助器
|否则=最低除数帮助器(m+1)n
primeFactors::Integer->[Integer]
素数因子1=[]
素数因子
|n<1=错误“必须为正”
|否则=设m=最小除数n
以m为单位:基本因子(n/m)
我在注释行上得到一个解析错误。我想我的问题可能是lowestdivisiorhelper
有防护,但编译器不知道防护是属于lowestdivisiorhelper
还是lowestdivisior
。我该怎么做
我应该补充一点,我不想为了隐藏实现细节而在顶层定义helper函数。导入文件时不应使用helper函数
lowestDivisor :: Integer -> Integer
lowestDivisor n = lowestDivisorHelper 2 n where
lowestDivisorHelper m n
| (m `divides` n) = m -- these should belong to lowestDivisorHelper
| otherwise = lowestDivisorHelper (m+1) n
您需要使用helper函数启动一个新语句,以便通过比较使防护装置充分缩进。
(您还忘记了一个参数,n
)
这也将有助于:
lowestDivisor :: Integer -> Integer
lowestDivisor n = lowestDivisorHelper 2 n
where
lowestDivisorHelper m n
| (m `divides` n) = m -- these should belong to lowestDivisorHelper
| otherwise = lowestDivisorHelper (m+1) n
但这并不是:
lowestDivisor :: Integer -> Integer
lowestDivisor n = lowestDivisorHelper 2 n
where lowestDivisorHelper m n
| (m `divides` n) = m -- these should belong to lowestDivisorHelper
| otherwise = lowestDivisorHelper (m+1) n
关键是|
必须比函数名更靠右
一般来说,开始一条新线路时,只要它更靠右,就会继续上一条线路。警卫必须继续从函数名开始。啊,我刚刚写了一条评论,说你的上一个例子很好。“导入文件不应该带着helper函数。”在这种情况下,不要导出它。