Laurent Deniau wrote:
apfelmus wrote:

Back then, I was given the task to calculate some sequence
of numbers which I did in one page of C code.

import Data.Set

xs = let f x m = x: let y = x `div` 2
                    in f (if member y m then 3*x else y) (insert x m)
     in f 1 (singleton 0)

As said, it's two lines if the terminal is too small :)

I can't see how it could be one page of C unless the page is 10 lines long ;-) The following code is the direct translation of your Haskell code (except that it prints the result instead of building a list).

a+, ld.

#include <stdio.h>
#include <intset.h>

void f(int x, intset s) {
  printf("%d, ", x);
  f (intset_elem(s, x/2) ? 3*x : x/2, intset_put(s, x));
}

int main(void) {
  f (1, intset_put(intset_new(), 0));
}

Well, I only remember that it took _me_ a page of C code :D Basically due to a hand-coded intset and user interaction (no REPL for C, after all).


Regards,
apfelmus

_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to