SML方法接受一个名单列表,并返回一个列表

问题描述:

我需要创建一个采用列表的列表(如[ [2,3,] , [4,5] ]),并返回类似[2,3,4,5]的方法。我可以计算逻辑,但是我不知道如何在SML中定义方法。我试过但不编译SML方法接受一个名单列表,并返回一个列表

fun appendall(l:list list):list = ... 
+0

这功课吗?它看起来足够像我添加标签的作业。如果它不是作业,请随时取下标签。 –

+0

@AdamMihalcin [请注意,作业标签现在已被弃用,不能再使用。](http://meta.stackexchange.com/q/147100) – Gilles

看起来你刚刚得到了你的类型错误。列表必须是某个列表(例如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 

希望这有助于你。