我有下一个代码:
datatype expr = K of string| Number2 of expr * (expr list);
datatype number = Number1 of string | Number3 of int;
fun append (nil, l2) = l2
| append (x::xs, l2) = x::append(xs, l2);
fun map [] = []
| map (h::t) = (What h)::(map t);
fun What (K x) = [Number1(x)]
|What (Number2 (t,[])) = Number3(0)::What(t)
|What (Number2 (y,a::b)) = append(What(a), map(b));
Run Code Online (Sandbox Code Playgroud)
它无法识别函数"What".(未绑定的变量或构造函数).我该怎么解决它,它会知道"什么"的功能?
谢谢.
SML中的声明从上到下工作,所以map看不到What.切换顺序无济于事,因为那时What也看不到map,给出了同样的错误.相反,您需要使用and以下方法同时声明相互递归的函数:
fun map [] = []
| map (h::t) = (What h)::(map t)
and What (K x) = [Number1(x)]
| What (Number2 (t,[])) = Number3(0)::What(t)
| What (Number2 (y,a::b)) = append(What(a), map(b))
Run Code Online (Sandbox Code Playgroud)