wea*_*ock 16 erlang compiler-errors
我试图编写代码来打印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".
Gor*_*rie 33
问题是你混淆了两个功能:
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?'
bjn*_*ier 19
你试图定义两个函数,第一个有3个参数(zeez/3),另一个有2个参数(zeez/2).磁头不匹配错误是因为前一行的zeez/3函数应以'.'结尾.
即因为你已经用';'结束了之前的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(空格,0)和zeez(空格,M)的排序,编译器会给出关于"...... xxx行的前一个句子总是匹配"的警告.你应该在zeez(space,M)之前放置zees(space,0),因为它更具体.
| 归档时间: | 
 | 
| 查看次数: | 12792 次 | 
| 最近记录: |