【问题标题】:Generating an infinite set of numbers生成无限的数字集
【发布时间】:2014-11-16 10:47:33
【问题描述】:

我正在尝试制作一个素数生成器,它应该能够返回一系列素数,直到 nth 数。现在我想应该有一种更优雅的方式来处理序列,除了我当前的解决方案感觉有点冗长,我不得不使用可变对象。

0
|> Seq.unfold (fun x -> if isPrime x 
                          then Some(x, x + 1) 
                         else 
                          let mutable y = x
                          while isPrime y <> true do
                           y <- y + 1
                          Some(y, y + 1)) 
|> Seq.take(n)

【问题讨论】:

    标签: f# primes lazy-sequences


    【解决方案1】:

    使用过滤器的简单解决方案

    let t = Seq.initInfinite id |> Seq.filter isPrime |> Seq.take n
    

    【讨论】:

    • 我不知道这个id 函数。它有什么作用?
    • id 是身份函数。您可以使用let id = fun t -&gt; t 定义它
    【解决方案2】:

    为了完整起见,请参阅MSDN treatment of sequences。它包括这个 isPrime 定义

    let isPrime n =
        let rec check i =
            i > n/2 || (n % i <> 0 && check (i + 1))
        check 2
    
    let t2 n = seq { for n in 1..100 do if isPrime n then yield n } 
    t2 10
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多