diff --git a/rover.fnl b/rover.fnl index 42a2da7..baa8753 100644 --- a/rover.fnl +++ b/rover.fnl @@ -43,11 +43,10 @@ :l {:direction (turn-left rover.direction)} _ (assert false (. "unrecognised command " string))))) -(fn execute [rover [cmd & cmds]] - (let [r1 (command rover cmd)] - (if (next cmds) - (execute r1 cmds) - r1))) +(fn execute [rover cmds] + (accumulate [rover rover + _ c (ipairs cmds)] + (merge rover (command rover c)))) (fn rover [x y direction] {: x @@ -99,5 +98,10 @@ (expect "Rotates to north when pointing west and asked to turn right" (execute r [:r]) {:x 2 :y 4 :direction :n})) +(let [r (rover 1 1 :s)] + (expect "Multiple commands are executed in the right order" + (execute r [:l :l :f :f :f :r :f]) + {:x 2 :y 4 :direction :e})) + (print "OK")