这是直接来自我教授的代码。
-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
答案 0 :(得分:3)
有一些事情正在发生:
Z
和end
调用之间没有空格,因此第一个接收块永远不会终止(并且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.