F# 使用List.map创建奇数列表

F# 使用List.map创建奇数列表,f#,F#,我的教授让我们创建一系列函数,这些函数与基于连续分数近似pi和e有关。为了建立这个模型,他让我们创建一个函数,该函数取一个整数并映射许多奇数的平方,从1开始。例如,以下是所需的行为: oddSquares 6;; val it : int list = [1.0; 9.0; 25.0; 49.0; 81.0; 121.0] 我可以看到一个映射很可能会用来平方列表中的所有值,但我无法找到一种方法来将数字映射到一个数字列表。我不想要求任何人为我编写代码,但有条不紊地说,当我组装基本列表时,我想做

我的教授让我们创建一系列函数,这些函数与基于连续分数近似pi和e有关。为了建立这个模型,他让我们创建一个函数,该函数取一个整数并映射许多奇数的平方,从1开始。例如,以下是所需的行为:

oddSquares 6;; 
val it : int list = [1.0; 9.0; 25.0; 49.0; 81.0; 121.0]
我可以看到一个映射很可能会用来平方列表中的所有值,但我无法找到一种方法来将数字映射到一个数字列表。我不想要求任何人为我编写代码,但有条不紊地说,当我组装基本列表时,我想做什么


感觉最好的方法是从6个术语的基数开始,反向工作。然后,我们实际计算第六个奇数项11或2x-1,但需要一些递归方法来继续计算较小的奇数项。我还认为,这与试图将数字映射到这些值的精神背道而驰。有人能给我一些关于从数字到列表形式的第一次翻译的指导吗?

F提供了创建连续数字列表的特殊简洁语法:

let oneToSix = [1..6]

这是一种叫做列表理解的特殊情况。它们可能比连续的数字更复杂——它们可以包括多个生成器、过滤器、投影、笛卡尔积等。特别是,生成前N个奇数的整个任务可以表示为一个列表。但是,由于您明确要求不要为您编写代码,我不会这样做。

Aha!我非常接近,但我从来都不知道在集合中使用这种符号。我的函数只是返回一个空列表,因为duh,我传递了一个要映射到的空列表。现在,我的映射跨越了[1..n]中的列表。非常感谢。让oddSquares n=List.map fun x->x*2-1[1..n]显示奇数集。我可以找出如何在我的作业中正确地变形它。你也应该看看。与列表相反,它们被惰性地计算,可以是无限的。我认为这对你正在努力实现的目标很有用。