F#

时间:2016-11-07 14:04:13

标签: function f#

我有一个简单的函数,列出给定输入数的每个素数因子。它由以下组成:

let rec f n x a = 
    if x = n then
        x::a
    elif n % x = 0 then 
        f (n/x) x (x::a)
    else
        f n (x+1) a

let fact n = f n 2 []

fact 315
val factors : int list = [7; 5; 3; 3]

它有效,但我想把它作为一个单一的功能:如何定义factf直接嵌套?我试图应用出色的表达here的概念,但我没有抽象出如何在一个参数1(f)中嵌套三个参数函数(fact)。

2 个答案:

答案 0 :(得分:6)

  1. fact的函数体移动到新行。确保它是缩进的。
  2. fact的声明与您刚刚移动的函数体之间添加一个空行。
  3. 剪切 fun的整个定义,并粘贴将其添加到您在第二步中创建的空白行中。
  4. 缩进复制的代码,使其成为fact.
  5. 的本地函数

答案 1 :(得分:1)

您需要做的就是将递归函数f移到fact内,然后调用它。它将使用传递给fact的参数:

let fact n =
    let rec f n x a = 
        if x = n then
            x::a
        elif n % x = 0 then 
            f (n/x) x (x::a)
        else
            f n (x+1) a
    f n 2 []

fact 315
//val it : int list = [7; 5; 3; 3]