((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)))
(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)