Erlang 代码没有编译?

Erlang code not compiling?

这是我的教授直接提供的代码。

-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     

发生了一些事情:

  • 您使用的短划线字符未被解析 -(因此在您的第 11 行和其他行上有​​一些非 ascii 字符未被解析)
  • Zend 调用之间没有 space,所以第一个接收块永远不会终止(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.