簡體   English   中英

OCaml中的CPS:類型不檢查

[英]CPS in OCaml: type doesn't check

我正在CPS上進行非常簡單的OCaml練習。 第8-10行是將兩個遞歸調用轉換為一個尾遞歸。 但是,編譯器抱怨第8行的類型:

文件“ tmp.ml”,第8行,字符9-14:

錯誤:此表達式的類型為int-> int->(int-> int)-> int,但應使用int類型的表達式

我知道編譯器期望第8行是int ,因為第6行返回int 但是有人可以說明為什么8-10行不是int類型嗎?

  4 let rec f i n k (i:int) (n:int) (k:int->int) :int =
  5     if i + n < 0 then
  6         k 1
  7     else
  8         (f i (n-1) (fun v ->
  9             f (i-1) n (fun vv->
 10                 k (v + vv))))
 11 in f 1 1 (fun x -> x)

fi n-1被解析為(fin)-1而不是您可能期望的fi (n-1)

另外,

let rec f i n k (i:int) (n:int) (k:int->int) :int

表示您的函數采用6個參數: inkink 您可能打算寫:

let rec f (i:int) (n:int) (k:int->int) :int

暫無
暫無

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

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