Pergunta

Eu tenta escrever código para imprimir caráter Z.

zzzzzzz
     z
    z
   z
  z
 z
zzzzzzz

Mas quando eu compilar este código, ele lança

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

Eu não posso corrigido este erro. I não encontrou o que de errado na minha podia.
Será que alguém por favor me sugerir.
Obrigado.

-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".
Foi útil?

Solução

O problema é que você misturou-se 2 funções:

zeez / 2 e zeez / 3

Se você terminar a função zeez / 3 por terminá-lo com um ponto final não um ponto e vírgula que deve 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 .

Os meios mensagem de erro, 'Ei, eu estou em zeez / 3 e de ter jogado em uma cláusula 2-arity, wtf?'

Outras dicas

Você está tentando definir duas funções, a primeira com 3 parâmetros (zeez / 3) e outro com 2 parâmetros (zeez / 2). O erro cabeça incompatibilidade ocorre porque a função zeez / 3 na linha anterior deve ser encerrado com um ''.

i. porque você terminou a função anterior zeez / 3 com um ';', que espera que a seguinte declaração para ser outro jogo 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)] );

Você também deve observar que o compilador lhe dará avisos sobre "... cláusula anterior na linha xxx sempre corresponde" por causa da ordenação de Zees (espaço, 0) e zeez (espaço, M). Você deve colocar Zees (espaço, 0) antes zeez (espaço, M), porque é mais específico.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top