Return Styles: Pseud0ch, Terminal, Valhalla, NES, Geocities, Blue Moon.

Pages: 1-

learning erlang

Name: I am learning erlang 2009-09-04 23:23

-module(merge).
-compile(export_all).
-import(lists.filter).

qsort([]) -> [];
qsort([Head | Tail]) ->
   Pivot = Head,
   qsort(lists:filter(fun(X) -> X < Pivot end, Tail)) ++ [Pivot] ++ qsort(lists:filter(fun(X) -> X > Pivot end, Tail)).


length([], Total) -> Total;
length([_ | Tail], Total) ->
   length(Tail, Total + 1).
length(List) ->
   length(List, 0).

%% take takes the first N elements
takeT([], _) -> [];
takeT(_, 0)  -> [];
takeT([Head | Tail], N) ->
    [Head | takeT(Tail, N - 1)].


%% takeM takes every element after N and returns the list of elements after the Nth index
takeM([], _) -> [];
takeM([Head | Tail], N) ->
   if
      N >  0  -> takeM(Tail,  N - 1);
      N == 0 -> [Head | takeM(Tail, N)];
      true -> []
  end.


merge([]) -> [];
merge([Head]) -> [Head];
merge([Head | Tail]) ->
   Left   = qsort(takeT([Head | Tail], erlang:trunc(merge:length([Head | Tail])/2))),
   Right  = qsort(takeM([Head | Tail], erlang:trunc(merge:length([Head | Tail])/2))),
   Left ++ Right.



lol merge quicksort

Name: Anonymous 2009-09-04 23:36

That's nice, but please use some code tags please! (╬ ಠ益ಠ)

Name: Anonymous 2009-09-05 0:17


-module(merge).
-compile(export_all).
-import(lists.filter).

qsort([]) -> [];
qsort([Head | Tail]) ->
   Pivot = Head,
   qsort(lists:filter(fun(X) -> X < Pivot end, Tail)) ++ [Pivot] ++ qsort(lists:filter(fun(X) -> X > Pivot end, Tail)).


length([], Total) -> Total;
length([_ | Tail], Total) ->
   length(Tail, Total + 1).
length(List) ->
   length(List, 0).

%% take takes the first N elements
takeT([], _) -> [];
takeT(_, 0)  -> [];
takeT([Head | Tail], N) ->
    [Head | takeT(Tail, N - 1)].


%% takeM takes every element after N and returns the list of elements after the Nth index
takeM([], _) -> [];
takeM([Head | Tail], N) ->
   if
      N >  0  -> takeM(Tail,  N - 1);
      N == 0 -> [Head | takeM(Tail, N)];
      true -> []
  end.


merge([]) -> [];
merge([Head]) -> [Head];
merge([Head | Tail]) ->
   Left   = qsort(takeT([Head | Tail], erlang:trunc(merge:length([Head | Tail])/2))),
   Right  = qsort(takeM([Head | Tail], erlang:trunc(merge:length([Head | Tail])/2))),
   Left ++ Right.

Name: Anonymous 2009-09-05 10:53

Way to reinvent the wheel bro
Also, why did you name drop takeM?

Name: Anonymous 2009-09-05 13:34

>>4
Also, why did you name drop takeM?
ftfy

Name: Anonymous 2009-09-05 15:16

>>5
lol OCD

Name: Anonymous 2009-09-05 15:31

RMS's best propaganda has always been his hacking. So it is for all of us; to the rest of the world outside our little tribe, the excellence of our software is a *far* more persuasive argument for openness and freedom than any amount of highfalutin appeal to abstract principles. So the next time RMS, or anybody else, urges you to "talk about freedom", I urge you to reply "Shut up and show them the code."

Name: Anonymous 2009-09-05 17:00

Also, if you want to learn Erlang, focus on the actor model and using processes efficiently. Learn functional programming in general from Haskell.

Name: Anonymous 2010-12-25 14:46

<

Name: Anonymous 2010-12-26 2:34


Don't change these.
Name: Email:
Entire Thread Thread List