turtle(Program,ShortProgram):- Coordinate = (0,0), Orientation = (1,0), canonical_drawing(Program,Coordinate,Orientation,Drawing), length(ShortProgram,_), canonical_drawing(ShortProgram,Coordinate,Orientation,Drawing), !. canonical_drawing(Program,Coordinate,Orientation,Drawing) :- generate(Program,Coordinate,Orientation,ADrawing), sort(ADrawing,Drawing). generate([],_,_,[]). generate([rotate|Program],Coordinate,(DX,DY),O) :- generate(Program,Coordinate,(DY,-DX),O). generate([step|Program],(X,Y),(DX,DY),Drawing) :- X1 is X + DX, Y1 is Y + DY, Drawing = [(X,Y)-(X1,Y1),(X1,Y1)-(X,Y)|RestDrawing], generate(Program,(X1,Y1),(DX,DY),RestDrawing).