projects
/
clnl
/ commitdiff
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
0a00e05
)
Make agentsets annotated lists, Implement count
author
Frank Duncan <frank@kank.net>
Sat, 30 Apr 2016 17:01:33 +0000
(12:01 -0500)
committer
Frank Duncan <frank@kank.net>
Sat, 30 Apr 2016 17:01:33 +0000
(12:01 -0500)
src/main/nvm/base.lisp
patch
|
blob
|
history
src/main/nvm/nvm.lisp
patch
|
blob
|
history
src/main/package.lisp
patch
|
blob
|
history
src/main/parse.lisp
patch
|
blob
|
history
src/main/transpile.lisp
patch
|
blob
|
history
src/test/simpletests.lisp
patch
|
blob
|
history
diff --git
a/src/main/nvm/base.lisp
b/src/main/nvm/base.lisp
index 9c49c9900bbd35d308e837fbeabc47dbb8a44193..1df5022fbc08c73d4adb3d5131cc356566dc9c0c 100644
(file)
--- a/
src/main/nvm/base.lisp
+++ b/
src/main/nvm/base.lisp
@@
-14,4
+14,8
@@
(defstruct patch color xcor ycor)
(defun agent-set-list (agent-set)
(defstruct patch color xcor ycor)
(defun agent-set-list (agent-set)
- agent-set)
+ (cond
+ ((eql agent-set :turtles) *turtles*)
+ ((eql agent-set :patches) *patches*)
+ ((and (listp agent-set) (eql :agent-set (car agent-set))) (cdr agent-set))
+ (t (error "Doesn't seem to be an agent-set: ~A" agent-set))))
diff --git
a/src/main/nvm/nvm.lisp
b/src/main/nvm/nvm.lisp
index f8fdd84bde3a72ecdc4c8e87f6db905e5c42ca44..da42870c86d3cbc4129a4220a039c316bd60f75b 100644
(file)
--- a/
src/main/nvm/nvm.lisp
+++ b/
src/main/nvm/nvm.lisp
@@
-100,7
+100,7
@@
DESCRIPTION:
each time it's used, so changes depending on the state of the engine.
See http://ccl.northwestern.edu/netlogo/docs/dictionary.html#patches"
each time it's used, so changes depending on the state of the engine.
See http://ccl.northwestern.edu/netlogo/docs/dictionary.html#patches"
-
*patches*
)
+
:patches
)
(defun turtles ()
"TURTLES => ALL-TURTLES
(defun turtles ()
"TURTLES => ALL-TURTLES
@@
-117,7
+117,7
@@
DESCRIPTION:
each time it's used, so changes depending on the state of the engine.
See http://ccl.northwestern.edu/netlogo/docs/dictionary.html#turtles"
each time it's used, so changes depending on the state of the engine.
See http://ccl.northwestern.edu/netlogo/docs/dictionary.html#turtles"
-
*turtles*
)
+
:turtles
)
(defun ask (agent-set fn)
"ASK AGENT-SET FN => RESULT
(defun ask (agent-set fn)
"ASK AGENT-SET FN => RESULT
@@
-144,6
+144,22
@@
DESCRIPTION:
:while agent
:do (let ((*myself* *self*) (*self* agent)) (funcall fn)))))
:while agent
:do (let ((*myself* *self*) (*self* agent)) (funcall fn)))))
+(defun count (agent-set)
+ "COUNT AGENT-SET => N
+
+ARGUMENTS AND VALUES:
+
+ AGENT-SET: a NetLogo agentset
+ N: a number
+
+DESCRIPTION:
+
+ COUNT is equivalent to count in NetLogo. Returns N, the number of
+ agents in AGENT-SET.
+
+ See http://ccl.northwestern.edu/netlogo/docs/dictionary.html#count"
+ (coerce (length (agent-set-list agent-set)) 'double-float))
+
(defun of (fn agent-set)
"OF FN AGENT-SET => RESULT
(defun of (fn agent-set)
"OF FN AGENT-SET => RESULT
diff --git
a/src/main/package.lisp
b/src/main/package.lisp
index 356a408179b4f2a417c0becba1208b8db1e409ff..d9d95af89b10a14c3259a78d1af9c0a724c9ca58 100644
(file)
--- a/
src/main/package.lisp
+++ b/
src/main/package.lisp
@@
-64,11
+64,12
@@
into an ast that can be transpiled later."))
(defpackage #:clnl-nvm
(:use :common-lisp)
(defpackage #:clnl-nvm
(:use :common-lisp)
- (:shadow #:random)
+ (:shadow #:random
#:count
)
(:export #:export-world #:create-world #:current-state
; API as used by transpiled NetLogo programs
#:agent-value
#:ask
(:export #:export-world #:create-world #:current-state
; API as used by transpiled NetLogo programs
#:agent-value
#:ask
+ #:count
#:create-turtles
#:die
#:of
#:create-turtles
#:die
#:of
diff --git
a/src/main/parse.lisp
b/src/main/parse.lisp
index 2f6b77f2a6a859215e44ebeb9d655838f092a2d1..b3dd3d79c919eedd3b169eb5bdd1fb2b7988fb1d 100644
(file)
--- a/
src/main/parse.lisp
+++ b/
src/main/parse.lisp
@@
-224,7
+224,7
@@
DESCRIPTION:
(defprim :clear-all ())
(defprim :crt (:number))
(defprim :color ())
(defprim :clear-all ())
(defprim :crt (:number))
(defprim :color ())
-(defprim :count ())
+(defprim :count (
:agentset
))
(defprim :die ())
(defprim :display ())
(defprim :with (:reporter-block))
(defprim :die ())
(defprim :display ())
(defprim :with (:reporter-block))
diff --git
a/src/main/transpile.lisp
b/src/main/transpile.lisp
index ea53bfcc7a4c984d08139f977f3082b42f4f1927..627a6a8907cc3cb4855d2e843268f4ce67e1c8ec 100644
(file)
--- a/
src/main/transpile.lisp
+++ b/
src/main/transpile.lisp
@@
-138,9
+138,10
@@
DESCRIPTION:
(defsimpleprim :+ :reporter cl:+)
(defsimpleprim :* :reporter cl:*)
(defsimpleprim :/ :reporter cl:/)
(defsimpleprim :+ :reporter cl:+)
(defsimpleprim :* :reporter cl:*)
(defsimpleprim :/ :reporter cl:/)
-(defprim :any? :reporter (lambda (agentset) `(> (
length
,agentset) 0)))
+(defprim :any? :reporter (lambda (agentset) `(> (
clnl-nvm:count
,agentset) 0)))
(defsimpleprim :ask :command clnl-nvm:ask)
(defagentvalueprim :color)
(defsimpleprim :ask :command clnl-nvm:ask)
(defagentvalueprim :color)
+(defsimpleprim :count :reporter clnl-nvm:count)
(defsimpleprim :crt :command clnl-nvm:create-turtles)
(defsimpleprim :die :command clnl-nvm:die)
(defsimpleprim :fd :command clnl-nvm:forward)
(defsimpleprim :crt :command clnl-nvm:create-turtles)
(defsimpleprim :die :command clnl-nvm:die)
(defsimpleprim :fd :command clnl-nvm:forward)
diff --git
a/src/test/simpletests.lisp
b/src/test/simpletests.lisp
index 43bed4601954c71f079be82585de54bf63dbaf44..22b2d196ee8c8c160446cc4a17c642768657b626 100644
(file)
--- a/
src/test/simpletests.lisp
+++ b/
src/test/simpletests.lisp
@@
-187,3
+187,12
@@
(defsimplecommandtest "setxy 1" "crt 10 ask turtles [ setxy random-xcor random-ycor ]"
"B02FD5B864A129AED5254A68C499607F7F6EA236")
(defsimplecommandtest "setxy 1" "crt 10 ask turtles [ setxy random-xcor random-ycor ]"
"B02FD5B864A129AED5254A68C499607F7F6EA236")
+
+(defsimplereportertest "count 1" "count turtles" "0"
+ "E1DE30F072D785E0D0B59F28B0F7853E3D3E0D8B")
+
+(defreportertestwithsetup "count 2" "crt 10" "count turtles" "10"
+ "A925E39EC022967568D238D31F70F0A375024A89")
+
+(defsimplereportertest "count 3" "count patches" "9"
+ "E1DE30F072D785E0D0B59F28B0F7853E3D3E0D8B")