2011-11-05 105 views
1

我有SML中的列表,它包含来自数据类型"expr"(列表“b”)的成员。 我也有功能"What",它的参数只是从日常类型"expr"。 现在我在接下来的代码问题:发生SML - 列表和递归

datatype expr = K of string| Number2 of expr * (expr list); 
datatype number = Number1 of string | Number3 of int; 
What.... 
| What (Number2 (t,[]))= Number3(0)::What(t) 
| What (Number2 (y,(a::b)) = append (What(a), What(b)); 

的错误,因为b是expr列表,功能What只拿到了“expr”,而不是“expr list”。我想要做的就是检查所有成员是"b",并创建一个新列表 - 哪个成员来自数据类型"number"。 我试图使用map function,但它没有帮助(请参阅此处的标记:SML - unbound variable or constructor)。

有什么想法?还有另一种方法可以做到,而不使用地图?我堆上了一天..

+0

你必须解释一下你所说的“没有帮助”,给你的其他问题得到了解决是什么意思。你所期望的正确输出并不完全清楚。给出“What”函数的完整定义以及输入和期望输出的示例。 –

+1

另请注意,不是使用'append'函数,而是使用内建函数'@'。那将是'lst1 @ lst2'。 –

+0

@ Jesper.Reenberg:非常感谢!运营商@解决问题! –

回答

9

为了让问题关闭。

您在前面的问题所作的append功能:

fun append (nil, l2) = l2 
    | append (x::xs, l2) = x::append(xs, l2); 

可以与内置的附加操作符@所取代。由于documentation describes

l1 @ l2 
    returns the list that is the concatenation of l1 and l2.