1

我刚刚开始使用 F#,并且正在尝试 Problem Euler 问题 #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' 结构中只能绑定简单的变量模式

为什么我会收到此错误?

4

1 回答 1

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

这不适用于递归函数。

于 2013-05-17T00:26:09.387 回答