2014-08-17 2 views
1

В чем разница? почему я получаю только первый элемент в списке?erlang - quicksort. Стандартная программа quicksort от learnyousomeerlang

-module(hello). 
-export(quicksort/1,                     
    lc_quicksort/1]). 

quicksort([]) -> []; 
quicksort([Pivot|Rest]) -> 
    quicksort([x || x <- Rest, x =< Pivot]) 
    ++[Pivot] 
    ++ quicksort([y || y <- Rest, y > Pivot]). 

lc_quicksort([]) -> []; 
lc_quicksort([Pivot|Rest]) -> 
lc_quicksort([Smaller || Smaller <- Rest, Smaller =< Pivot]) 
++ [Pivot] ++ 
lc_quicksort([Larger || Larger <- Rest, Larger > Pivot]). 



1> c("hello.erl"). 

{ok,hello} 

2> hello:quicksort([3, 1, 4, 2, 5, 9]). 

[3] 

3> hello:lc_quicksort([3, 1, 4, 2, 5, 9]). 

[1,2,3,4,5,9] 

Что мне не хватает? Проводя это, чтобы узнать, что функциональность erlang, которую я пропустил во время обучения.

Спасибо.

ответ

6

Первая буква переменной должна быть прописной, например Rest или Smaller. x и y в вашей функции: atom s.

quicksort([]) -> []; 
quicksort([Pivot|Rest]) -> 
    quicksort([X || X <- Rest, X =< Pivot]) 
    ++[Pivot] 
    ++ quicksort([Y || Y <- Rest, Y > Pivot]).