繁体   English   中英

F#中的嵌套函数

[英]Nested functions in 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]

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

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

您需要做的就是将递归函数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]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM