2015-04-17 2 views
0

это код непосредственно от моего профессора.Код Erlang не компилируется?

-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  

ответ

3

Есть несколько вещей происходит:

  • черта характера вы используете не получает разобранный - (так что на вашей строке 11 и других есть некоторый символ не-ascii, который не получает синтаксический анализ)
  • между Z инет места, так что первый блок приема никогда не заканчивается (и Эрланг считает, что существует несвязанная переменная, называемая 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. 
Смежные вопросы