我需要創建一個採用列表的列表(如[ [2,3,] , [4,5] ]
),並返回類似[2,3,4,5]
的方法。我可以計算邏輯,但是我不知道如何在SML中定義方法。我試過但不編譯SML方法接受一個名單列表,並返回一個列表
fun appendall(l:list list):list = ...
我需要創建一個採用列表的列表(如[ [2,3,] , [4,5] ]
),並返回類似[2,3,4,5]
的方法。我可以計算邏輯,但是我不知道如何在SML中定義方法。我試過但不編譯SML方法接受一個名單列表,並返回一個列表
fun appendall(l:list list):list = ...
看起來你剛剛得到了你的類型錯誤。列表必須是某個列表(例如int list
)。如果內容的類型是無關緊要的,你可以使用一個類型變量'a
,而不是一個具體類型(所以在你的情況下,'a list
和'a list list
)。
但是,你幾乎永遠不需要ML類型聲明。只需在沒有它們的情況下編寫你的函數,編譯器就能夠從你正在執行的操作中推斷變量的類型。
查看List libary中的concat函數。
Moscow ML version 2.01 (January 2004)
Enter `quit();' to quit.
- load "List";
> val it =() : unit
- List.concat [[1,2],[3,4],[5,6]];
> val it = [1, 2, 3, 4, 5, 6] : int list
- quit();
另一個解決辦法是使用List.foldr
val concat = List.foldr [email protected] [];
或者你可以只寫簡單的作爲一個遞歸函數
fun concat2 [] = []
| concat2 (x::xs) = x @ concat2 xs
希望這有助於你。
這功課嗎?它看起來足夠像我添加標籤的作業。如果它不是作業,請隨時取下標籤。 –
@AdamMihalcin [請注意,作業標籤現在已被棄用,不能再使用。](http://meta.stackexchange.com/q/147100) – Gilles