【发布时间】:2010-11-09 00:06:44
【问题描述】:
昨天我在一些空闲时间开始研究 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。
【问题讨论】:
-
附带说明,使用
Console.WriteLine非常不符合 F# 的精神。我建议改用printfn "%i" i。 -
printf 更安全,可以推断出一些类型。
-
尝试使用折叠重写它。