[英]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個參數: i
, n
, k
, i
, n
和k
。 您可能打算寫:
let rec f (i:int) (n:int) (k:int->int) :int
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.