procedure main(arglist) every writes(catalan(i)," ") end procedure catalan(n) # return catalan(n) or fail static M initial M := table() if n > 0 then return (n = 1) | \M[n] | ( M[n] := (2*(2*n-1)*catalan(n-1))/(n+1)) end