algorithm - 在 F# 中创建不超过某个值的列表或数字序列

标签 algorithm function math f# functional-programming

假设我想创建一个包含 5555 以下的所有立方数或 4500 以下的斐波那契数的列表或序列 - 我该怎么做?

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

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

最佳答案

在 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 .

关于algorithm - 在 F# 中创建不超过某个值的列表或数字序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27976416/

相关文章:

c# - 如何根据某个数字重复特定顺序的数组元素?

C - 反转数字

javascript - 函数参数作为文本不起作用

c - 关于在 C 中使用指针的函数

以方便的方式返回两个矩阵的函数

algorithm - 有额外限制的排列

Python - 将浮点字符串解析为整数

javascript - 如何从数组中删除某些元素到新数组中,并将不重复的元素保留在具有相同数组长度的相同位置

java - 分割字符串,记住分隔符并将其附加为空格

java - 是否可以设计一个递归来控制输出结果?