The scene below is 104 characters of CALIEN, compiled to JavaScript. Zero JS drawing logic.
Pure CALIEN is only computation — it cannot see a pixel. This page is a graphics host: it injects drawing opcodes into the language and hands CALIEN a canvas. Your script is transpiled to JS with CALIEN.compileJS before it runs.
Colors are small ints into a 16-color palette:
(Px x y c) — one pixel. (Fl x0 y0 x1 y1 c) — filled rectangle. (Fd x0 y0 x1 y1 c1 c2 pct) — dithered fill (pct% of pixels get c2). (Cf x y r c) — filled circle. (Ef x y rx ry c) — filled ellipse. (Rn n) — random int 0..n-1. (Sin x) (Cos x) — trig for animation. Out-of-bounds paints are silent no-ops.
3D adds: (T3 ax ay az bx by bz cx cy cz c) — one triangle. (Rx a) (Ry a) — rotate. (Tr x y z) — translate. (Ps) (Pp) — push/pop the transform, so each object animates independently. (Cd d) — camera distance. The host rasterizes in software (perspective, z-buffer, flat shading).
Your script defines S with (defn S () ...) and issues draw calls. Animated scripts define (defn S (t) ...) — the host calls it every frame with t in seconds.
Core ops: + - * / % < > = ! ^ ? & | ; Lp — parenthesized prefix, fixed arity, no precedence. (Lp n body) runs body n times with t bound to 0..n-1. A wrong operand count fails right where it happens. Errors come back as codes E01–E08 with the operator named.