f# - 谁能告诉我这个 F# 片段有什么问题?

标签 f# functional-programming matching

else 语句之前的行显然期待一个单位,但却得到一个 bool 值。我刚开始使用 F#,但无法理解这一点。

由于我以前从未使用过 Stackoverflow,所以我有点与布局作斗争,而且代码框仍然让我感到困惑!我相信原件中的间距是正确的。

let m = Dictionary<int, int>() 

let rec fib i = 
    match i with
    | 1 -> i
    | 0 -> i
    | _ -> 
        if m.ContainsKey(i) then  
           if m.[i] > 0 then 
              m.[i] 
            else
              let x = fib(i - 1) + fib(i - 2)
              m.Add(i, x)
        m.[i] 

如果有人能告诉我如何在这些帖子中保持间距,我将不胜感激!

最佳答案

最后一点有点不对——应该是

if m.ContainsKey(i) then  
       if m.[i] > 0 then 
          m.[i] 
        else
          let x = fib(i - 1) + fib(i - 2)
          m.Add(i, x)
          x

您正在从 if 语句中返回。您可能也不需要 if m.[i] > 0 。在这种情况下,您会得到

let m = Dictionary<int, int>() 

let rec fib i = 
    match i with
    | 1 -> i
    | 0 -> i
    | _ -> 
        if m.ContainsKey(i) then  
            m.[i] 
        else
            let x = fib(i - 1) + fib(i - 2)
            m.Add(i, x)
            m.[i]

要在 Stackoverflow 上进行格式化,只需将代码粘贴进去,然后高亮显示并按 ctrl+k 或点击 {} 按钮即可自动将该部分置于代码模式(代码在普通文本之后缩进四个空格)

关于f# - 谁能告诉我这个 F# 片段有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13641953/

相关文章:

f# - typeof <'x' > 结果为 "Type inference caused the type variable x to escape its scope"

javascript - 组合两个相同大小的数组并返回总和

ruby - 是否可以用没有函数的语言进行函数式编程?

Java - 检查带有附加 '&' 字符的匹配括号

F#如何在类型声明中设置数组长度

F# 相当于 C# 中的 SortedDictionary

python - 如何返回 bool 值列表以查看一个列表的元素是否在另一个列表中

C++ 错误 : no matching constructor for initialization of

asynchronous - F# : Monad operations without computation expressions

scala - Scala流的功能处理而不会出现OutOfMemory错误