allow if without else

This commit is contained in:
VaclavT 2021-02-22 01:29:54 +01:00
parent e84d63c138
commit c9c58f9030
1 changed files with 6 additions and 2 deletions

8
ml.cpp
View File

@ -887,12 +887,15 @@ namespace builtin {
// if-else (SPECIAL FORM)
MlValue if_then_else(std::vector<MlValue> args, MlEnvironment &env) {
if (args.size() != 3)
if (args.size() != 2 && args.size() != 3)
throw MlError(MlValue("if", if_then_else), env, args.size() > 3 ? TOO_MANY_ARGS : TOO_FEW_ARGS);
if (args[0].eval(env).as_bool())
return args[1].eval(env);
else return args[2].eval(env);
else if (args.size() == 3)
return args[2].eval(env);
return MlValue(0);
}
// Define a variable with a value (SPECIAL FORM)
@ -1423,6 +1426,7 @@ namespace builtin {
if (args.size() == 0)
throw MlError(MlValue("push", push), env, TOO_FEW_ARGS);
for (size_t i = 1; i < args.size(); i++)
args[0].push(args[i]);
return args[0];