This is a tiny toy programming system inspired by several ideas:

- Turtle graphics as in LOGO, but with a
*bidirectional*user interface as in Sketch-n-Sketch, but using*gradient-based*updates as in ML systems.

It's parsed by nearley and the automatic differentiation is in forward-mode by dual numbers. Try some of these examples:

set i to 18! set theta to 30! while i do { forward 20! set theta to theta * (90 / 100!) turn degs[theta] set i to i - 1 }

set theta to degs[0.5 * 180!] set a to 50! set b to 100! turn degs[-90!] turn theta forward a turn neg[theta] set phi to asin[(a / b) * sin[theta]] turn neg[phi] forward b turn phi turn degs[90!] forward neg[15!] turn degs[neg[90!]] set i to 4 while i do { set i to i - 1 forward 30! turn degs[90!] }

set i to 20! set theta to degs[4.5 * 10!] set v to 1.5 * 10! set g to -1! set vx to v * cos[theta] set vy to v * sin[theta] forward -100! while i do { set i to i - 1 forward vx turn degs[-90!] forward vy turn degs[90!] set vy to vy + g }