0
我想在SML中實現遞歸調用函數。我的代碼是SML遞歸調用函數
CM.make "$cml/cml.cm";
open CML;
fun sender n()= if (n<100)
then
(
TextIO.print (Int.toString(n)^"\n");
sender n+1
)
else
exit()
fun main() = let
val _ = spawn (sender 3);
val tid1 = getTid();
in
TextIO.print("MY TID"^(tidToString tid1)^"\n")
end;
RunCML.doit(main, NONE);
我提示以下錯誤:
Cml.sml:3.5-10.8 Error: right-hand-side of clause doesn't agree with function result type [circularity] expression: unit -> 'Z result type: 'Z in declaration: sender = (fn arg => (fn <pat> => <exp>))
我在做什麼錯?
由於工作就像一個魅力,我對在SML()運算符有些懷疑我的代碼工作,如果我刪除。並且在調用sender時不要傳遞(),那麼在代碼中使用它有什麼意義? – user2433145
你可以定義'fun sender'n = ...',它可以在沒有額外的'()'的情況下很好地工作,但後來你想用'spawn'來產生一個並行執行'sender'的線程。按照設計,'spawn'需要一個'unit - > unit',所以你必須使用'sender'來符合這個。當然,你可以通過'spawn(fn()=> sender'3)'來做到這一點。 – creichen