! Copyright (C) 2013 Dondy. ! See http://factorcode.org/license.txt for BSD license. USING: locals sequences math kernel arrays sequences.deep ; IN: foobar :: make-point-list ( seq -- newseq ) seq length even? seq empty? not and [ { } seq first2 2array suffix seq 2 tail make-point-list append ] [ { } ] if ; :: zig ( p1 p2 -- p3 ) p1 first2 :> ( x1 y1 ) p2 first2 :> ( x2 y2 ) x1 x2 y1 y2 - + + 2 / x2 x1 y1 y2 + - + 2 / 2array ; :: zag ( p1 p2 -- p3 ) p1 first2 :> ( x1 y1 ) p2 first2 :> ( x2 y2 ) x1 x2 y1 y2 + + - 2 / x1 x2 y1 y2 + - + 2 / 2array ; :: (dragon) ( p1 p2 p3 d -- seq ) d 0 = [ p1 p2 2array ] [ p1 p1 p2 zig p2 d 1 - (dragon) p2 p2 p3 zag p3 d 1 - (dragon) 2array ] if ; : dragon ( -- seq ) [let { 100 100 } :> p1 { 356 100 } :> p2 p1 p1 p2 zig p2 3 (dragon) ] flatten make-point-list ;