program bell_numbers; print("First 15 and 50th Bell numbers:"); b := bell_nums(50); loop for i in [1..15] with 50 do print(lpad(str i, 2) + ": " + str b(i)); end loop; print; print("First 10 rows of the Bell triangle:"); loop for row in bell_triangle(10) do print(+/[lpad(str n, 7) : n in row]); end loop; proc bell_nums(n); tri := bell_triangle(n); return [row(#row) : row in tri]; end proc; proc bell_triangle(rows); tri := [[1]]; loop for i in [2..rows] do row := tri(#tri); nextrow := [row(#row)]; loop for n in row do nextrow with:= nextrow(#nextrow) + n; end loop; tri with:= nextrow; end loop; return tri; end proc; end program;