A naive implmentation of Boolean types and nil node has been added

This commit is contained in:
Sameer Rahmani 2019-12-18 18:38:34 +00:00
parent e3b6a054b4
commit 709346311a
5 changed files with 20 additions and 5 deletions

View File

@ -5,7 +5,7 @@ public class FalseNode extends Node {
@Override
public Object eval(Scope scope) {
return false;
return Boolean.FALSE;
}
@Override

View File

@ -17,7 +17,7 @@ public class IfSpecialForm extends SpecialForm {
@Override
public Object eval(final Scope scope) {
Object result = this.pred.eval(scope);
if (result == null) {
if (result == null || (result instanceof Boolean && (Boolean) result == false)) {
return this.elseNode.eval(scope);
}
return this.ifNode.eval(scope);

View File

@ -43,7 +43,12 @@ public class Main {
if (result != ListNode.EMPTY) {
System.out.print(";; ");
System.out.println(result.toString());
if (result == null) {
System.out.println("nil");
}
else {
System.out.println(result.toString());
}
}
}
catch(Exception e) {

View File

@ -5,7 +5,7 @@ public class NilNode extends Node {
@Override
public Object eval(Scope scope) {
return this;
return null;
}
@Override

View File

@ -83,7 +83,17 @@ public class Reader {
str = str + (char) ch;
}
return new SymbolNode(str);
switch(str) {
case "true":
return new TrueNode();
case "false":
return new FalseNode();
case "nil":
return new NilNode();
default:
return new SymbolNode(str);
}
}
private static Node readNumber(PushbackReader inputStream) throws IOException {