2014-12-07 41 views
0

我想爲SML中的唯一大數製作排序函數,但編譯器一直將我的函數類型設置爲int而不是'a。我怎樣才能明確地告訴編譯器使用IntInf?SML如何顯式設置函數參數類型爲IntInf

這裏是我的代碼:

fun selectsort([a]) = [a] 
    | selectsort(h::t) = 
    if (hd(selectsort(t))) < h then hd(selectsort(t))::h::tl(selectsort(t)) 
    else h::selectsort(t); 

當我嘗試

fun selectsort([a]) = [a] 
    | selectsort(l : IntInf list) = 
    if (hd(selectsort(tl(l)))) < hd(l) then hd(selectsort(tl(l)))::h::tl(selectsort(tl(l))) 
    else hd(l)::selectsort(tl(l)); 

它不斷給我 「錯誤:未綁定類型的構造:IntInf」

+0

使用變通方法求解:'if(hd(choicesort(t))+ IntInf.fromInt(0)) 2014-12-07 16:08:49

回答

1

IntInf是一個模塊的名稱,該類型被命名爲IntInf.int。唉,你的代碼稍微簡化:

fun selectsort([a]) = [a] 
    | selectsort(x::y::t : IntInf.int list) = 
    if y < x then y::x::selectsort(t) else x::selectsort(y::t) 

然而要注意IntInf是一個可選的模塊,它並不適用於所有的實現。 (另外,您應該爲空列表添加一個案例。)

+0

我做了一個非常具體的代碼段,所以空列表將不會被排序。 – 2014-12-08 10:15:51

+0

@ Jean-LucNacifCoelho,無論如何添加遺失的情況都被認爲是很好的風格,引發一個'Domain'異常。 – 2014-12-08 14:10:40