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()))); }
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; }
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); }
private function evaluateArgs(Environment $env, ListForm $args) { return array_map(function ($arg) use($env) { return $arg->evaluate($env); }, $args->toArray()); }