SML - 列表和递归

时间:2011-11-05 08:03:00

标签: sml

我在SML中有列表,其中包含数据类型"expr"(列表“b”)的成员。 我也有函数"What",它的参数只来自dayatype "expr"。 现在我在下一个代码中遇到问题:

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)。

有什么想法吗?有另一种方法可以做到这一点,而不使用地图?我把它叠了一天......

1 个答案:

答案 0 :(得分: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.