F中的嵌套函数#

F中的嵌套函数#

问题描述:

我有一个简单的函数,列出给定输入编号的每个主要因素。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的概念,但我未能提供如何在一个参数之一(fact)中嵌套三个参数函数(f)。

+3

'fun'不能用作F#的标识符,因为它是一种很常见的关键字。 – TeaDrivenDev

+2

这甚至没有编译。首先,'fun'是一个关键字。其次,“f”和“a”从哪里来? – nphx

+1

'f'与'fun'可能是一样的东西。 – TeaDrivenDev

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

所有你需要做的是移动的递归函数ffact内,然后调用它的本地功能。它将使用传递给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]