昨天我开始在业余时间看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]
这个实现不适用于非常大的列表,但它说明了功能性解决方案的优雅性。