2009-11-26 17 views
11

Intento escribir código para imprimir el carácter Z.¿Qué significa el error de compilación del "error de coincidencia"?

zzzzzzz 
    z 
    z 
    z 
    z 
z 
zzzzzzz 

Pero cuando compilo este código, tiros

D:\erlang\graphics>erlc zeez2.erl 
d:/erlang/graphics/zeez2.erl:19: head mismatch 
d:/erlang/graphics/zeez2.erl:6: function zeez/3 undefined 

No puedo fijo este error. No encontré lo que estaba mal en mi poder.
Por favor sugiérame.
Gracias.

-module(zeez2). 
-export([main/0]). 

main() -> 
    L = 8, 
    zeez(false ,1, L). % line 6 

zeez(true, M,M) -> 
    init:stop(); 

zeez(false, M, N) -> 
    io:format("~p~n", [zeez(z, N-M)]), 
    zeez(M rem N =:= 0, M + 1, N); 

zeez(true, M, N) -> 
    io:format("~p~n", [zeez(space, N-M)]), % line 16 
    zeez(M rem N =:= 0, M + 1 , N); 

zeez(space, M) -> 
    io:format("~p~n", ["-" ++ zeez(space, M-1)]); 

zeez(space, 0) -> 
    "Z"; 

zeez(z, M) -> 
    io:format("~p~n", ["Z" ++ zeez(z, M-1)]); 

zeez(z,0) -> 
    "Z". 
+0

Tal vez un error tipográfico, pero también te falta la función terminator '.' al final de main/0 –

Respuesta

29

el problema es que se han mezclado hasta 2 funciones:

zeez/2 y zeez/3

Si termina la función zeez/3 terminándola con un punto ni una punto y coma se debe compilar:

zeez(true, M, N) -> 
    io:format("~p~n", [zeez(space, N-M)]), % line 16 
    zeez(M rem N =:= 0, M + 1 , N);      <-- should end with . 

significa que el mensaje de error, 'Hey estoy en zeez/3 y le he echado en una cláusula 2-aridad, wtf?'

17

Está tratando de definir dos funciones, la primera con 3 parámetros (zeez/3) y otra con 2 parámetros (zeez/2). El error de desajuste del cabezal se debe a que la función zeez/3 en la línea anterior debe terminar con un '.'.

I.e. porque has terminó la función anterior zeez/3 con un ';', que espera que la siguiente declaración a otro partido para zeez/3:

zeez(true, M, N) -> 
    io:format("~p~n", [zeez(space, N-M)]), % line 16 
    zeez(M rem N =:= 0, M + 1 , N). 

zeez(space, M) -> 
    io:format("~p~n", ["-" ++ zeez(space, M-1)]); 

También debe tener en cuenta que el compilador le dará advertencias acerca "... la cláusula anterior en la línea xxx siempre coincide" debido al orden de zees (espacio, 0) y zeez (espacio, M). Debería poner zees (espacio, 0) antes de zeez (espacio, M), porque es más específico.

Cuestiones relacionadas