Tengo el siguiente código:SML - variable sin asignar o constructor
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));
No reconoce la función de "qué" (variable no unido o constructor).. ¿Cómo puedo solucionarlo, que sabrá la función "Qué"?
Gracias.
Gracias, Nicholas, yo solo trato con esto y apilo. "b" puede ser una lista de expr. Solo quiero verificar cada expr en esa lista y decidir si es "Number1" o "Number3" o expr de tipo de datos; todo esto lo hago con la función What. La única idea es usar "mapa" para verificar cada miembro de la lista. Pero da un error: "operador y operador no están de acuerdo". ¿Alguna idea? –
Tus tipos están muy confundidos. En primer lugar, sí: b es definitivamente una lista de expr. Todos son exprs: no Number1 o Number3s en b. Deberá explicarnos lo que está tratando de hacer, porque no creo que tengamos la oportunidad de ayudarlo de otra manera. ¿Te das cuenta de que la función del mapa es muy diferente al mapa normal? Quizás esa es la confusión. Ignoras y también; ¿ese expr está destinado a ser usado para algo? –
¿Por qué mi función es diferente del mapa normal? Aclararé mi pregunta: El número 2 es expr, y puede ser una lista de expr. Ahora, si es una lista de expr, entonces quiero verificar cada miembro en esa lista, y averiguar si es K o Number2. Luego, tengo que decidir qué hacer con este miembro (puede ser Number1 o Number3, mis dos primeras líneas en la función What) y hacer una lista que solo contenga Number1 o Number3. entonces, Mi forma intuitiva es usar un mapa para verificar cada miembro en "b", iniciar el final de la lista, usando la función de mapa. Gracias. –