Erlang代码没有编译?

时间:2015-04-17 01:55:29

标签: erlang erlang-shell

这是直接来自我教授的代码。

-module(m) .
-export([ abc/1 , n/1] ) .

abc(X) ->
Y = spawn_link(m , n , [ self()]) ,
Y ! X ,
receive
Z -> Z 
end .

n(X,X) −> [X] ;
n(X,Y) −> [Y| n(X,Y+Y) ] .
n(Z) −> receive N −> Z ! n(N∗N,N)
end .

没有编译,这是我得到的错误消息

m.erl:11: illegal character   
m.erl:12: illegal character   
m.erl:12: syntax error before: '>'   
m.erl:13: illegal character    
m.erl:13: illegal character    
m.erl:13: illegal character    
m.erl:13: syntax error before:N   
m.erl:2: function n/1 undefined     

1 个答案:

答案 0 :(得分:3)

有一些事情正在发生:

  • 您正在使用的短划线字符未被解析 - (所以在您的第11行和其他人中有一些非ascii字符未被解析)
  • Zend调用之间没有空格,因此第一个接收块永远不会终止(并且Erlang认为存在一个名为Zend的未绑定变量。

我清理了下面的代码,它为我编译。我会看一下你的缩进和间距,也许会尝试更加惯用。

-module(m).
-export([ abc/1, n/1]).
abc(X) ->
        Y = spawn_link(m , n , [ self()]) ,
        Y ! X,
    receive
        Z -> Z
    end.

n(X,X) -> 
    [X];
n(X,Y) -> 
    [Y|n(X,Y+Y) ].
n(Z) -> 
    receive 
        N -> Z ! n(N*N,N) 
    end.