USING: arrays generalizations kernel locals math sequences nested-comments ; IN: dondy : zig ( p1 p2 -- p3 ) [ [ [ first ] [ second ] bi* + ] [ [ second ] [ first ] bi* - ] 2bi + 2 / ] [ [ [ second ] [ first ] bi* - ] [ [ first ] [ second ] bi* + ] 2bi + 2 / ] 2bi 2array ; : zag ( p1 p2 -- p3 ) [ [ [ first ] bi@ + ] [ [ second ] bi@ + ] 2bi - 2 / ] [ [ [ first ] bi@ - ] [ [ second ] bi@ + ] 2bi + 2 / ] 2bi 2array ; : dragon' ( vector p1 p2 p3 d -- vector ) dup zero? [ 2drop 2array over push ] [ { [ nip [ dup ] 2dip [ [ zig ] keep ] 2dip 1 - dragon' ] [ [ drop ] 3dip [ dup ] 2dip [ [ zag ] keep ] [ 1 - ] bi* dragon' ] } 5 ncleave append ] if ; : dragon ( n -- seq ) [ V{ } clone { 100 100 } dup { 356 100 } [ zig ] keep ] dip dragon' concat ;