昨天我开始在业余时间看f。我想我应该从打印100以内的所有素数的标准问题开始。这就是我想到的…

#light
open System

let mutable divisable = false
let mutable j = 2

for i = 2 to 100 do
    j <- 2
    while j < i do
        if i % j = 0 then divisable <- true
        j <- j + 1

    if divisable = false then Console.WriteLine(i)
    divisable <- false

问题是我觉得我是从C/C的角度来处理这个问题的,而不是真正的功能语言方面。
我想知道其他人能想出什么-以及是否有人有任何提示/指针/建议。我觉得现在网上很难找到好的f内容,我接触的最后一种功能语言是大约5年前在大学时的HOPE

最佳答案

下面是f中Sieve of Eratosthenes的一个简单实现:

let rec sieve = function
    | (p::xs) -> p :: sieve [ for x in xs do if x % p > 0 then yield x ]
    | []      -> []

let primes = sieve [2..50]
printfn "%A" primes  // [2; 3; 5; 7; 11; 13; 17; 19; 23; 29; 31; 37; 41; 43; 47]

这个实现不适用于非常大的列表,但它说明了功能性解决方案的优雅性。

08-24 16:49