【问题标题】:Nested functions in F#F# 中的嵌套函数
【发布时间】:2016-11-09 21:33:07
【问题描述】:

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

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]

它可以工作,但我想把它变成一个函数:我如何定义 fact 和直接嵌套的 f?我试图应用出色地表达的概念here,但我未能抽象出如何将一个三参数函数(f)嵌套在一个参数一(fact)中。

【问题讨论】:

  • fun 不能用作 F# 中的标识符,因为它是一个非常常见的关键字。
  • 这甚至不能编译。首先,fun 是一个关键字。二、fa从何而来?
  • f 可能与fun 相同。
  • 我想a 应该是q
  • @TeaDrivenDev 这就是我最初的想法,但它会导致不同的输出:[-1; -105; 3]。并且需要一段时间来计算。 :P

标签: function f#


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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2023-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-10
      • 2021-06-06
      • 2017-05-04
      • 1970-01-01
      相关资源
      最近更新 更多