[Nix-dev] Trying to implement quicksort in nix...
Eric Sagnes
eric.sagnes at gmail.com
Wed Apr 13 15:08:08 CEST 2016
The following seems to work:
```
let
qs = l:
if l == [] then []
else
with builtins;
let x = head l;
xs = tail l;
low = filter (a: a < x) xs;
high = filter (a: a >= x) xs;
in low ++ [x] ++ high;
in
qs [3 4 1 2]
```
I think you get infinite recursion because `xs` in the else branch is
refering to the whole list and not the tail.
On Wed, Apr 13, 2016 at 02:39:22PM +0200, Matthias Beyer wrote:
> Hi,
>
> I struggle implementing quicksort in the nix expression language... maybe one of
> you gurus can help me? Here's what I have so far:
>
> let
> len = xs: builtins.length xs;
> fst = xs: builtins.head xs;
> lower = x: xs: builtins.filter (a: a < x) xs;
> higher = x: xs: builtins.filter (a: a >= x) xs;
>
> qs = xs:
> if (0 == (len xs)) then []
> else (qs (lower (fst xs) xs)) ++ (fst xs) ++ (qs (higher (fst xs) xs));
> in
> qs [3 4 1 2]
>
> Any ideas why I'm getting a stackoverflow due to infinite recursion?
>
> --
> Mit freundlichen Grüßen,
> Kind regards,
> Matthias Beyer
>
> Proudly sent with mutt.
> Happily signed with gnupg.
> _______________________________________________
> nix-dev mailing list
> nix-dev at lists.science.uu.nl
> http://lists.science.uu.nl/mailman/listinfo/nix-dev
--
Eric Sagnes
サニエ エリック
More information about the nix-dev
mailing list