我知道我可以這樣寫SML中的y-combinator,如下所示: 首先聲明一個新的數據類型來繞過由於圓形造成的類型不匹配。 datatype 'a mu = Roll of ('a mu -> 'a)
val unroll = fn Roll x => x
現在您可以輕鬆定義的Y組合子: val Y = fn f => (fn x => fn a => f (unroll x x) a)
沒有使用大小寫表達式(在類的下一節出現),我看不出爲什麼以下不做快速排序。它在某個地方進入循環,永遠不會結束。 splitAt和append已經過測試,但這裏是他們的代碼。 fun append(xs, ys) =
if null xs
then ys
else (hd xs) :: append(tl xs, ys)
fun splitAt(xs : int list, x : int
我有2個列表。它們的長度總是相同,可能看起來就像這個玩具的例子。實際的內容是不可預測的。 val original = [1, 2, 0, 1, 1, 2]
val elements = ["a","b","c","d","e","f"]
我想創建以下列表: val mappedList = [["c"],["a","d","e"],["b","f"]]
0 1 2
如果我定義 fun id x = x
高階函數,那麼自然id已鍵入'a -> 'a 當然,id 0計算結果爲0,使完美的感覺。 由於這是非常合情合理的,我應該能夠通過一個函數來封裝它: fun applyToZero (f: 'a -> 'a) = f 0
希望能applyToZero將有類型('a -> 'a) -> int和applyToZero id將評估爲0 但是,當我嘗試如上定義
這段代碼有什麼問題? fun expd s:string = if size(s) > 0 then true else false; 錯誤我收到: - fun exnd s:string = if size(s) > a then true else false;
stdIn:657.1-837.8 Error: unbound variable or constructor: a
Erro
我試圖創建一個程序,將總結大階乘的數字,這就是我在做什麼: fun sumDigits n =
if n < 10 then n
else
n mod 10 + sumDigits(n div 10)
fun factLarge 1 = IntInf.toLarge 1
| factLarge n = IntInf.toLarge n * factLa