2009-11-26 96 views
11

我試圖編寫代碼來打印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". 
+0

也許是一個錯字,但你也錯過了函數終止符''。在main/0的末尾 – 2009-11-26 21:44:07

回答

29

的問題是,你混淆了兩個功能:

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元數條款拋出,跆拳道?」

17

您試圖定義兩個函數,第一個帶有3個參數(zeez/3),另一個帶有2個參數(zeez/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),因爲它更具體。