X-Git-Url: https://code.consxy.com/gitweb/gitweb.cgi?a=blobdiff_plain;f=src%2Fmain%2Ftranspile.lisp;h=e78208d55bab867c01a5451d495a7fc2beb52857;hb=b257366;hp=327bdbd6d96c43e86a12394a5631cf994fbf67a8;hpb=762ab38881c8870c9a61ca6857a28159f9fef9fc;p=clnl diff --git a/src/main/transpile.lisp b/src/main/transpile.lisp index 327bdbd..e78208d 100644 --- a/src/main/transpile.lisp +++ b/src/main/transpile.lisp @@ -143,6 +143,7 @@ DESCRIPTION: ((eql :command-block (car reporter)) (transpile-command-block reporter)) ((eql :list-literal (car reporter)) (cons 'list (mapcar #'transpile-reporter (cdr reporter)))) ((eql :reporter-block (car reporter)) (transpile-reporter-block reporter)) + ((eql :token (car reporter)) (cadr reporter)) ((and (symbolp (car reporter)) (find (car reporter) *local-variables*)) (intern (symbol-name (car reporter)) clnl:*model-package*)) ((not (find-prim (car reporter))) (error "Couldn't find the reporter for ~S" (car reporter))) @@ -188,7 +189,7 @@ DESCRIPTION: (defagentvalueprim :color) (defsimpleprim '(:clear-all :ca) :command clnl-nvm:clear-all) (defsimpleprim :count :reporter clnl-nvm:count) -(defsimpleprim :crt :command clnl-nvm:create-turtles) +(defprim '(:crt :create-turtles) :command (lambda (num &optional fn) `(clnl-nvm:create-turtles ,num nil ,fn))) (defsimpleprim :die :command clnl-nvm:die) (defsimpleprim :display :command clnl-nvm:display) (defsimpleprim :fd :command clnl-nvm:forward) @@ -196,9 +197,12 @@ DESCRIPTION: (defprim :if :command (lambda (pred a) `(when ,pred ,@(make-command-block-inline a)))) (defprim '(:ifelse :if-else) :command (lambda (pred a b) - `(if ,pred - ,@(make-command-block-inline a) - ,@(make-command-block-inline b)))) + (let + ((then (make-command-block-inline a)) + (else (make-command-block-inline b))) + `(if ,pred + ,@(if (= (length then) 1) then `((progn ,@then))) + ,@(if (= (length else) 1) else `((progn ,@else))))))) (defagentvalueprim :label) (defagentvalueprim :label-color) @@ -226,6 +230,7 @@ DESCRIPTION: (defsimpleprim :tick :command clnl-nvm:tick) (defsimpleprim :ticks :reporter clnl-nvm:ticks) (defsimpleprim :turtles :reporter clnl-nvm:turtles) +(defsimpleprim :turtles-here :reporter clnl-nvm:turtles-here) (defagentvalueprim :who) (defsimpleprim :with :reporter clnl-nvm:with)