F# 只查找质数
F# finding only prime numbers
我最近刚接触 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>'
任何帮助将不胜感激
x |> List.ofSeq
对我来说似乎是个问题。您正在将 int 传递给需要列表的函数。 List.toSeq 将列表更改为序列。您希望函数 countPrimes 接受一个整数列表,而不仅仅是一个整数。尽管 Carsten 是对的,但 listNums 已经采用整数列表(编辑:并计算您想要的值,前提是 isPrime 是正确的)。
你不需要单独计算素数。足以删除并且可以工作:
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]
我找到了解决方案
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;;
谢谢大家!
我最近刚接触 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>'
任何帮助将不胜感激
x |> List.ofSeq
对我来说似乎是个问题。您正在将 int 传递给需要列表的函数。 List.toSeq 将列表更改为序列。您希望函数 countPrimes 接受一个整数列表,而不仅仅是一个整数。尽管 Carsten 是对的,但 listNums 已经采用整数列表(编辑:并计算您想要的值,前提是 isPrime 是正确的)。
你不需要单独计算素数。足以删除并且可以工作:
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]
我找到了解决方案
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;;
谢谢大家!