2009-11-26 1 views
11

私はZ文字を印刷するコードを書き込もうとします。"head mismatch"コンパイラエラーは何を意味しますか?

zzzzzzz 
    z 
    z 
    z 
    z 
z 
zzzzzzz 

しかし、私はこのコードをコンパイルするとき、それは私がこのエラーを修正することはできません

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

をスローします。私は何ができたのか分からなかった。
私にお勧めしますか?
ありがとうございます。

-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

おそらくタイプミスですが、機能ターミネータ 'がありません。'メイン/ 0の終わりに –

答えて

29

問題は、2つの機能混ざっているということです。

zeez/2とをzeez/3

あなたは完全に停止していない、それを終了することにより、zeez/3機能を終了する場合セミコロンは、それはコンパイルする必要があります

は、エラーメッセージが意味
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 . 

、「ちょっと私はzeez/3にいるよ、あなたは、2-アリティ句でWTFを投げてきました?」

17

3つのパラメータ(zeez/3)と2つのパラメータ(zeez/2)の2つの関数を定義しようとしています。ヘッドの不一致エラーは、前の行のzeez/3関数が '。'で終了する必要があるためです。

I.e. 「;」あなたと以前zeez/3機能を終了したので、それは次の宣言は、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)]); 

ます。また、コンパイラはあなたについての警告を与えることに注意してくださいzees(space、0)とzeez(space、M)の順序付けのため、 "xxxの前の節は常に一致します"。より具体的であるため、zeez(space、M)の前にzees(space、0)を置く必要があります。

関連する問題