我刚刚开始使用F#并且正在尝试问题欧拉问题#3。为了找到素数,我想出了以下代码来计算所有素数到最大数:
let rec allPrimes foundPrimes, current, max =
// make sure the current number isn't too high
// or the current number isn't divisible by any known primes
if current >= max then
foundPrimes
else
let nextValue = current + 1
if not List.exists (fun x -> current % x = 0L) foundPrimes then
allPrimes foundPrimes nextValue max
else
allPrimes (foundPrimes :: current) nextValue max
不幸的是,这给出了错误:
只有简单的变量模式可以绑定在'let rec'构造
中
为什么我收到此错误?
答案 0 :(得分:5)
您不想将逗号放在声明中 - 更改
let rec allPrimes foundPrimes, current, max =
到
let rec allPrimes foundPrimes current max =
您原件的正确版本将是
let rec allPrimes (foundPrimes, current, max) =
注意元组周围的括号。但是,这需要修改递归调用以使用元组形式。在原始版本中,编译器认为您正在尝试执行类似
的操作let a,b,c=1,2,3
不适用于递归函数。