簡體   English   中英

F#遞歸函數參數和堆棧溢出

[英]F# recursive function arguments and stack overflow

我對F#有些新鮮,當我使用一些遞歸函數時,我遇到了一些奇怪的行為。 我有兩個不同的版本:

版本1:
這導致堆棧溢出,雖然它似乎不應該(至少對我的noob眼睛)

let rec iMake acc =
  match acc with
  | 10 -> 100
  | _ -> iMake acc+1

版本2:
這個可以像我期望的那樣工作。

let rec iMake acc =
  match acc with
  | 10 -> 100
  | _ -> iMake (acc+1)

唯一的區別是版本2將acc + 1表達式放入括號中。 所以我的問題是,為什么第一個版本不起作用,但第二個版本不起作用? 這是否意味着我應該將所有函數參數放入括號中以避免將來出現這種類型的東西?

Function call優先級高於二元運算符+ 所以第一個函數實際上就像:

let rec iMake acc =
    match acc with
    | 10 -> 100
    | _ -> (iMake acc)+1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM