2016-11-07 115 views
2

我有一個簡單的函數,列出給定輸入編號的每個主要因素。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

回答

6
  1. fact的函數體移至新行。確保它是縮進的。
  2. fact聲明與剛移動的函數體之間添加一個空行。
  3. 剪切整個定義爲fun粘貼它到你在第二步創建的空行。
  4. 縮進複製的代碼,使之成爲fact.
1

所有你需要做的是移動的遞歸函數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]