Frage

ich versuche, Code zu schreiben Z-Zeichen zu drucken.

zzzzzzz
     z
    z
   z
  z
 z
zzzzzzz

Aber wenn ich diesen Code zu kompilieren, es wirft

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

Ich kann diesen Fehler nicht behoben. Ich fand nicht, was falsch in meinen könnte.
Muss man vorschlagen mich bitte.
Danke.

-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".
War es hilfreich?

Lösung

Das Problem ist, dass Sie zwei Funktionen gemischt haben:

zeez / 2 und zeez / 3

Wenn Sie die zeez / 3 Funktion beenden, indem sie mit einem Punkt nicht ein Semikolon enden sollte es kompilieren:

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 .

Die Fehlermeldung bedeutet, 'hey ich in zeez bin / 3, und Sie haben in einer 2-arity Klausel geworfen, wtf?'

Andere Tipps

Sie versuchen, zwei Funktionen zu definieren, die erste mit 3 Parametern (zeez / 3) und das andere mit 2 Parametern (zeez / 2). Der Kopffehlanpassungsfehler ist, weil die zeez / 3-Funktion in der vorhergehenden Zeile sollte mit einem beendet werden ‚‘.

d. weil Sie die vorherige zeez / 3-Funktion mit einem Ende haben ‚;‘, es erwartet, dass die folgende Erklärung ein anderes Spiel für zeez / 3 sein:

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)] );

Sie sollten auch beachten, dass der Compiler Sie Warnungen geben über „... vorherige Klausel in Zeile xxx immer übereinstimmt“ wegen der Bestellung von zees (Raum, 0) und zeez (Raum, M). Sie sollten zees setzen (Leerzeichen, 0) vor zeez (Raum, M), weil es mehr spezifisch ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top