SML - 未绑定的变量或构造函数

Ada*_* Sh 6 sml

我有下一个代码:

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".(未绑定的变量或构造函数).我该怎么解决它,它会知道"什么"的功能?

谢谢.

Mic*_*ber 8

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)