Parallel Rogue-like benchmark

bearophile bearophileHUGS at lycos.com
Sun Aug 25 18:26:08 PDT 2013


Paul Jurczak:

> You still have a chance, because I don't quite get it. With the 
> little I know about Haskell, I find this code very elegant. 
> What is wrong with it? Performance?

A faithful QuickShort should work in-place, unlike that code.

This is an implementation of a similar functional algorithm in D, 
a "fake" QuickSort:


import std.stdio, std.algorithm, std.range, std.array;

auto quickSort(T)(T[] items) /*pure*/ nothrow {
     if (items.length < 2)
         return items;
     auto pivot = items[0];
     return items[1 .. $].filter!(x => x < pivot).array.quickSort ~
            pivot ~
            items[1 .. $].filter!(x => x >= pivot).array.quickSort;
}

void main() {
     [4, 65, 2, -31, 0, 99, 2, 83, 782, 1].quickSort.writeln;
}



It's a similar situation with the Sieve of Eratosthenes. There 
are ways to write an acceptable (but a little slower) Sieve of E. 
with immutable lists, but many of the functional little 
implementations you see around are not a true Sieve of E.:
http://www.cs.hmc.edu/~oneill/papers/Sieve-JFP.pdf

Bye,
bearophile


More information about the Digitalmars-d mailing list