2015-01-16 48 views
0

假设我想创建一个5555以下的所有立方数字或4500以下的斐波纳契数字的列表或序列 - 我该怎么做?在F#中创建一个列表或一个数字的序列达到一个特定的值序列号

我可以生成这些列表或序列,但我不知道如何使它们在某个点后终止。

在斐波那契数列的情况下,很难计算n使得F(n)小于某个x,所以我需要一个解决方案来生成列表或序列的元素,直到其中一个元素超过上限。

+3

'Seq.takeWhile'? –

回答

4

在F#中,可以使用seq<'T>类型来处理延迟生成的序列。例如,为了生成所有整数的平方,可以编写:

let rec integersFrom n = seq { 
    yield n 
    yield! integersFrom (n + 1) } 

let squares = seq { 
    for n in integersFrom 0 do 
    yield n * n } 

第一功能递归地产生所有整数的序列(如果这是使用一个无界的数值类型,这将是“无限”)。第二个应用转换。

正如评论Seq.takeWhile中提到的,您可以限制系列。假设你想要所有的方块小于1000:

squares |> Seq.takeWhile (fun n -> n < 1000) 

然后你可以完全评估系列, List.ofSeq

相关问题