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)
 {
     $pairs = $args->toArray();
     foreach ($pairs as $pair) {
         list($predicate, $trueForm) = $pair->toArray();
         if ($predicate->evaluate($env)) {
             return $trueForm->evaluate($env);
         }
     }
     return null;
 }
Example #3
0
 private function wrapSymbols(ListForm $rawBody)
 {
     $wrappedBody = array_map(function ($form) {
         if ($form instanceof ListForm) {
             return $this->wrapSymbols($form);
         }
         if (is_string($form)) {
             return new SymbolForm($form);
         }
         return $form;
     }, $rawBody->toArray());
     return new ListForm($wrappedBody);
 }
Example #4
0
 private function evaluateArgs(Environment $env, ListForm $args)
 {
     return array_map(function ($arg) use($env) {
         return $arg->evaluate($env);
     }, $args->toArray());
 }