我在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)。
有什么想法吗?有另一种方法可以做到这一点,而不使用地图?我把它叠了一天......
答案 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.