F#只找到素数

时间:2015-06-02 17:42:57

标签: f# primes

我最近刚接触F#所以请耐心等待。我遇到的问题是我试图找到素数。

我已经写了这段代码:

  let isPrime n =
    let rec check i =
    i > n/2 || (n % i <> 0 && check (i + 1))
       check 2;;

let listNums = List.filter isPrime >> List.length;;

 let nums = [ 16; 17; 3; 4; 2; 5; 11; 6; 7; 18; 13; 14; ];;

let countPrimes (x:int) = x |> List.ofSeq |> listNums;;

试图打电话

countPrimes nums;;

但是这个消息失败了:

The type 'int' is not compatible with the type 'seq<'a>'

任何帮助将不胜感激

3 个答案:

答案 0 :(得分:2)

我找到了解决方案

panelMain.add(panel1, BorderLayout.PAGE_END);
panelMain.add(panel2, BorderLayout.LINE_START);
panelMain.add(panel3, BorderLayout.LINE_END);
panelMain.add(jtf, BorderLayout.CENTER);

全部谢谢!

答案 1 :(得分:1)

x |&gt; List.ofSeq

对我来说似乎是个问题。您正在将int传递给需要列表的函数。 List.toSeq将列表更改为序列。您希望函数countPrimes采用整数列表,而不仅仅是整数。虽然Carsten是正确的,但listNums已经采用整数列表(编辑:并计算你想要提供的值isPrime是否正确)。

答案 2 :(得分:0)

您无需单独计算惩罚。足够删除并将工作:

let isPrime n =
    let rec check i =
        i > n/2 || (n % i <> 0 && check (i + 1))
    check 2

let nums = [ 16; 17; 3; 4; 2; 5; 11; 6; 7; 18; 13; 14; ]

let listPrime lst =
    lst |> List.filter isPrime

nums |> listPrime |> printfn "%A"

输出: [17; 3; 2; 5; 11; 7; 13]

链接: https://dotnetfiddle.net/nVXwZ5