Example #1
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 #2
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;
     };
 }