USING: arrays kernel math prettyprint sequences ; IN: dragon : zig-1 ( x1 y1 x2 y2 -- x3 ) [ rot swap + swap ] dip - + 2 / ; : zig-2 ( x1 y1 x2 y2 -- y3 ) [ rot + swap ] dip + + 2 / ; : zag-1 ( x1 y1 x2 y2 -- x3 ) [ rot swap + swap ] dip + - 2 / ; : zag-2 ( x1 y1 x2 y2 -- y3 ) [ rot swap - swap ] dip + + 2 / ; : zig ( p1 p2 -- p1 p3 p2 ) [ [ first2 ] bi@ [ zig-1 ] 4keep zig-2 2array ] 2keep [ swap ] dip ; : zag ( p1 p2 -- p1 p3 p2 ) [ [ first2 ] bi@ [ zag-1 ] 4keep zag-2 2array ] 2keep [ swap ] dip ; : (dragon) ( p1 p2 p3 d -- seq ) dup 0 = [ 2drop 2array ] [ 1 - swap dupd swap [ dupd swap ] 2dip ! p1 p2 d p2 p3 d [ zig ] 4dip ! p1 px p2 d p2 p3 d [ zag ] dip ! p1 px p2 d p2 py p3 d [ (dragon) ] 4dip ! seq p2 py p3 d (dragon) ! seqx seqy append ] if ; : dragon ( -- ) { 0 0 } { 100 100 } zig 2 (dragon) . ; MAIN: dragon