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

Ric*_*ths 3 f# functional-programming matching

else语句之前的行显然是期待一个单元但是得到了一个布尔值.我刚刚开始使用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] 
Run Code Online (Sandbox Code Playgroud)

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

Joh*_*mer 5

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

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
Run Code Online (Sandbox Code Playgroud)

你是从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]
Run Code Online (Sandbox Code Playgroud)

对于Stackoverflow上的格式化,只需粘贴代码然后突出显示并按ctrl + k或点击{}按钮自动将该部分置于代码模式(代码缩进四个空格,超过普通文本)