From a4182f7d8e4f26fe58cce4f0e2ea9ea15c9c4e9c Mon Sep 17 00:00:00 2001 From: Pekka Laiho Date: Sat, 30 May 2020 19:02:41 +0700 Subject: [PATCH] add if --- src/Evaller.php | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/Evaller.php b/src/Evaller.php index 2652971..727a3dc 100644 --- a/src/Evaller.php +++ b/src/Evaller.php @@ -60,6 +60,20 @@ class Evaller $value = $this->doEval($ast->get(2), $env); return $env->set($ast->get(1)->getName(), $value); + } elseif ($ast->get(0)->getName() == 'if') { + if ($ast->count() < 3 || $ast->count() > 4) { + throw new MadLispException("if requires 2 or 3 arguments"); + } + + $result = $this->doEval($ast->get(1), $env); + + if ($result == true) { + return $this->doEval($ast->get(2), $env); + } elseif ($ast->count() == 4) { + return $this->doEval($ast->get(3), $env); + } else { + return null; + } } elseif ($ast->get(0)->getName() == 'let') { if ($ast->count() != 3) { throw new MadLispException("let requires exactly 2 arguments");