"헤드 불일치"컴파일러 오류는 무엇을 의미합니까?
-
05-07-2019 - |
문제
나는 z 문자를 인쇄하기 위해 코드를 작성하려고한다.
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".
해결책
문제는 두 가지 기능을 혼합했다는 것입니다.
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-arity 조항, wtf에 던져 졌습니까?'
다른 팁
첫 번째 매개 변수 (Zeez/3), 다른 하나는 2 개의 매개 변수 (Zeez/2) 인 두 가지 함수를 정의하려고합니다. 헤드 불일치 오류는 이전 줄의 Zeez/3 함수가 a '.'로 종료되어야하기 때문입니다.
즉, ';'로 이전 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, 0)를 Zeez (Space, M) 전에 넣어야합니다.
제휴하지 않습니다 StackOverflow