Prims - Implement reset-ticks, tick, ticks
authorFrank Duncan <frank@kank.net>
Tue, 26 Apr 2016 15:17:13 +0000 (10:17 -0500)
committerFrank Duncan <frank@kank.net>
Tue, 26 Apr 2016 15:17:13 +0000 (10:17 -0500)
src/main/nvm/base.lisp
src/main/nvm/nvm.lisp
src/main/package.lisp
src/main/parse.lisp
src/main/transpile.lisp
src/test/simpletests.lisp

index ddd429ee265cf9ca01825340f13b340db20960d2..5865d66e0e325b4f12369d5d45e89a2e2004b632 100644 (file)
@@ -8,6 +8,7 @@
 (defvar *self* nil)
 (defvar *dimensions* nil)
 (defvar *topology* :torus)
+(defvar *ticks* nil)
 
 (defstruct turtle who color heading xcor ycor)
 (defstruct patch color xcor ycor)
index 3c2e531c4933a6173c045b58f6a3c3c2a63a0d19..f2057bd7605540eb65e94917d580dbadd8e91377 100644 (file)
@@ -264,6 +264,55 @@ DESCRIPTION:
   See http://ccl.northwestern.edu/netlogo/docs/dictionary.html#create-turtles"
  (loop :for i :from 1 :to n :do (create-turtle)))
 
+(defun reset-ticks ()
+ "RESET-TICKS => RESULT
+
+ARGUMENTS AND VALUES:
+
+  RESULT: undefined
+
+DESCRIPTION:
+
+  Resets the tick counter to zero, sets up all plots, then updates all plots.
+
+  See http://ccl.northwestern.edu/netlogo/docs/dictionary.html#reset-ticks"
+ (setf *ticks* 0d0))
+
+(defun tick ()
+ "RESET-TICKS => RESULT
+
+ARGUMENTS AND VALUES:
+
+  RESULT: undefined
+
+DESCRIPTION:
+
+  Advances the tick counter by one and updates all plots.
+
+  If the tick counter has not been started yet with reset-ticks, an error results.
+
+  See http://ccl.northwestern.edu/netlogo/docs/dictionary.html#tick"
+
+ (when (not *ticks*) (error "reset-ticks must be called"))
+ (incf *ticks*))
+
+(defun ticks ()
+ "TICKS => CURRENT-TICKS
+
+ARGUMENTS AND VALUES:
+
+  CURRENT-TICKS: A positiv double, representing the current number of ticks
+
+DESCRIPTION:
+
+  Reports the current value of the tick counter. The result is always a number and never negative.
+
+  If the tick counter has not been started yet with reset-ticks, an error results.
+
+  See http://ccl.northwestern.edu/netlogo/docs/dictionary.html#ticks"
+ (when (not *ticks*) (error "reset-ticks must be called"))
+ *ticks*)
+
 (defun create-world (&key dims)
  "CREATE-WORLD &key DIMS => RESULT
 
index 36fbafa07e6bed7a289638771baf739330c2f216..05f9cd7b061d7d4afd80127af2da9060caf870c9 100644 (file)
@@ -71,9 +71,12 @@ into an ast that can be transpiled later."))
   #:die
   #:forward
   #:lookup-color
+  #:reset-ticks
   #:random-float
   #:show
   #:turtles
+  #:tick
+  #:ticks
   #:turn-right #:turn-left)
  (:documentation
   "CLNL NVM
index 72c7edcd6ff03fed43788f0e51debf6736299c6a..eeadd95d840122cd2b501160eae125f550484020 100644 (file)
@@ -256,6 +256,7 @@ DESCRIPTION:
 (defprim :size ())
 (defprim :stop ())
 (defprim :tick ())
+(defprim :ticks ())
 (defprim :turtles ())
 
 ; colors
index 690fa3e815f6b9f874b26e724fb0f66a581f514e..9dc373f6b74cbc29750fb6b1fc034e23604ec4e0 100644 (file)
@@ -143,9 +143,12 @@ DESCRIPTION:
 (defprim-alias :if-else :ifelse)
 (defsimpleprim :lt :command clnl-nvm:turn-left)
 (defkeywordprim :nobody)
+(defsimpleprim :reset-ticks :command clnl-nvm:reset-ticks)
 (defsimpleprim :random-float :reporter clnl-nvm:random-float)
 (defsimpleprim :rt :command clnl-nvm:turn-right)
 (defsimpleprim :show :command clnl-nvm:show)
+(defsimpleprim :tick :command clnl-nvm:tick)
+(defsimpleprim :ticks :reporter clnl-nvm:ticks)
 (defsimpleprim :turtles :reporter clnl-nvm:turtles)
 
 ; Colors
index 6a3e53f0c2e535204016808c5c540932c27bddea..f4d6368f62097d7f3578a93be53319c220260d1e 100644 (file)
 
 (defsimplecommandtest "let 2" "let a 5 let b 6 crt (a + b)"
  "4ABB6822402929878AB9E5A1084B9E4AE1F01D5B")
+
+(defsimplecommandtest "ticks 1" "reset-ticks tick"
+ "E1DE30F072D785E0D0B59F28B0F7853E3D3E0D8B")
+
+(defreportertestwithsetup "ticks 1" "reset-ticks tick tick" "ticks" "2"
+ "E1DE30F072D785E0D0B59F28B0F7853E3D3E0D8B")