Charles.Forsyth20060303a828770d19 years agoHistory
43 lines · 790 B · Brainfuck
RawDownload
implement Ackermann; include "sys.m";	sys: Sys;include "draw.m";	draw: Draw; Ackermann: module{        init: fn(ctxt: ref Draw->Context, argv: list of string);}; init(nil: ref Draw->Context, argv: list of string){	sys = load Sys Sys->PATH;	draw = load Draw Draw->PATH;	argv = tl argv;		# remove program name	m := n := 0;	if(argv != nil){		m = int hd argv;		argv = tl argv;	}	if(m < 0)		m = 0;	if(argv != nil)		n = int hd argv;	if(n < 0)		n = 0;	t0 := sys->millisec();	a := ack(m, n);	t1 := sys->millisec();	sys->print("A(%d, %d) = %d (t = %d ms)\n", m, n, a, t1-t0);	} ack(m, n: int) : int{        if(m == 0)                return n+1;        else if(n == 0)                return ack(m-1, 1);        else                return ack(m-1, ack(m, n-1));}