Example #1
0
 public function evaluate(Environment $env, ListForm $args)
 {
     $name = $args->nth(0)->getSymbol();
     $macroArgs = $args->nth(1);
     $macroBody = $args->nth(2);
     $env[$name] = new MacroOp($macroArgs, $macroBody);
 }
Example #2
0
File: IfOp.php Project: igorw/ilias
 public function evaluate(Environment $env, ListForm $args)
 {
     $predicate = $args->nth(0);
     $trueForm = $args->nth(1);
     $elseForm = $args->nth(2);
     $form = $predicate->evaluate($env) ? $trueForm : $elseForm;
     return $form ? $form->evaluate($env) : null;
 }
Example #3
0
 private function expandSubLists(Environment $env, ListForm $form)
 {
     if (!count($form->toArray())) {
         return $form;
     }
     return new ListForm(array_merge([$form->nth(0)], $this->expandList($env, $form->cdr())));
 }
Example #4
0
 public function evaluate(Environment $env, ListForm $args)
 {
     $symbols = $args->nth(0)->toArray();
     $argNames = $this->getMappedSymbols($symbols);
     $bodyForms = $args->cdr()->toArray();
     return function () use($env, $argNames, $bodyForms) {
         $subEnv = clone $env;
         $vars = array_combine($argNames, func_get_args());
         foreach ($vars as $name => $value) {
             $subEnv[$name] = $value;
         }
         $value = null;
         foreach ($bodyForms as $form) {
             $value = $form->evaluate($subEnv);
         }
         return $value;
     };
 }
Example #5
0
 public function evaluate(Environment $env, ListForm $args)
 {
     $name = $args->nth(0)->getSymbol();
     $env[$name] = $args->nth(1)->evaluate($env);
 }