SML-列表和递归

SML-列表和递归,sml,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)

我在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”
。 我尝试使用
映射函数
,但没有任何帮助(请参见此处的标记:)


有什么想法吗?还有另一种方法,不用地图?为了解决这个问题,我在上面堆了一天

您在上一个问题中执行的
追加
功能:

fun append (nil, l2) = l2 
  | append (x::xs, l2) = x::append(xs, l2);
可替换为内置的附加运算符
@
。作为:


为了解决问题

您在上一个问题中执行的
追加
功能:

fun append (nil, l2) = l2 
  | append (x::xs, l2) = x::append(xs, l2);
可替换为内置的附加运算符
@
。作为:


考虑到你在另一个问题中得到的答案,你必须解释你所说的“没有帮助”是什么意思。您所期望的正确输出根本不清楚。给出
What
函数的完整定义以及输入和预期输出的示例。还请注意,您可以使用内置函数
@
而不是
append
函数。那将是
lst1@lst2
@Jesper.Reenberg:非常感谢!操作员@解决问题!考虑到你在另一个问题中得到的答案,你必须解释你所说的“没有帮助”是什么意思。您所期望的正确输出根本不清楚。给出
What
函数的完整定义以及输入和预期输出的示例。还请注意,您可以使用内置函数
@
而不是
append
函数。那将是
lst1@lst2
@Jesper.Reenberg:非常感谢!操作员@解决问题!