我需要创建一个获取列表列表的方法(如[ [2,3,] , [4,5] ]
)并返回类似[2,3,4,5]
的内容。我可以解决逻辑,但我不知道如何在SML中定义方法。我尝试了这个,但它没有编译
fun appendall(l:list list):list = ...
答案 0 :(得分:3)
查看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 op@ [];
或者你可以把它简单地写为递归函数
fun concat2 [] = []
| concat2 (x::xs) = x @ concat2 xs
希望这会对你有所帮助。
答案 1 :(得分:1)
看起来你的类型错了。列表必须是某个列表(例如int list
)。如果内容的类型无关紧要,您可以使用类型变量'a
而不是具体类型(在您的情况下,'a list
和'a list list
。
但是,你几乎不需要ML中的类型声明。只需编写没有它们的函数,编译器就能从你正在执行的操作中推断出变量的类型。