我一直在試圖學習SML NJ(標準ML新澤西州),我遇到了一個函數,我明白是遞歸,但不能完全圖爲什麼函數返回它所做的值。 功能: fun sum 0 = 0 | sum n = n+sum (n-1);
我明白,如果和的值是0,那麼將返回0。但是,我不明白第二部分是如何工作的。 測試功能: Input: sum 0; ---> output: 0;
Input: sum 1; ---> ou
我想問一下如何在SML/NJ中概念性地解釋[]::[]和[]::[]::[]。 我的想法: 我認爲[]::[]會產生錯誤或產生一個空的列表,但實際上它產生val it = [[]] : 'a list list。 後,我知道[]::[]產生[[]] : 'a list list,我認爲[]::[]::[]會產生[[[]]] : 'a list list list但實際上它產生[[],[]] : '
我有這個問題解決 和我設法解決這個問題,但沒有該功能execute_ops。這是我的解決方案: datatype list_op = insert of int*int | delete of int | setsize of int;
exception wrong_case;
fun insert(x,pos,nil) = [x]
| insert(x,pos,h::t) =
假設我有一個SML簽名ALPHA。但我也有多個結構/函子alpha1,alpha2等,我希望與ALPHA一起使用。我的問題是,如果我有一個結構在這些模塊之外執行單元測試,我將如何單獨測試ALPHA簽名而不必指定我正在使用的結構? 爲了把事情的角度,這裏是一些代碼: signature ALPHA =
sig
val func1
val func2
end
struct
作爲新SML,使用SML NJ我匿名函數行爲的功能識別功能的這種行爲: - fun test g= fn x=>x;
val test : 'a -> 'b -> 'b = _fn
- test 1 2;
val it : int = 2
- test 1;
val it : '1 -> '1 = _fn
是這樣嗎,該解釋器使用unit爲數據類型的輸入參數g ,如果在函數的調用中沒有
這是從教學的例子來說明CPS和尾遞歸: fun sum [] k = k 0
| sum (x::xs) k = sum xs (fn y=>k(x+y));
我理解如何匿名函數fn y=>k(x+y)將正確總結輸入列表中的元素問題。 據我所知,匿名函數意味着一個帶有一個參數y的新函數,其中函數體調用原函數k,參數爲y+x。 如果我調用sum [1,2,3,4,5] (fn x=>x