aboutsummaryrefslogtreecommitdiff
path: root/cs/types.cs
diff options
context:
space:
mode:
authorJoel Martin <github@martintribe.org>2014-04-06 22:38:26 -0500
committerJoel Martin <github@martintribe.org>2014-04-06 22:38:26 -0500
commitb56c49a12dad20c55fbf07775b536c9d656af313 (patch)
tree11989cec7ac0bc5ce4cc3b1ea46c9948847cc044 /cs/types.cs
parent53beaa0a6ddd9d8a5fb531f97c44a9c7129d1de7 (diff)
downloadmal-b56c49a12dad20c55fbf07775b536c9d656af313.tar.gz
mal-b56c49a12dad20c55fbf07775b536c9d656af313.zip
C#: add step2_eval.
Diffstat (limited to 'cs/types.cs')
-rw-r--r--cs/types.cs23
1 files changed, 22 insertions, 1 deletions
diff --git a/cs/types.cs b/cs/types.cs
index 1f2e797..7cbbd53 100644
--- a/cs/types.cs
+++ b/cs/types.cs
@@ -16,7 +16,10 @@ namespace Mal {
public abstract class MalVal {
// Default is just to call regular toString()
- public abstract string ToString(bool print_readably);
+ public virtual string ToString(bool print_readably) {
+ return "<unknown>";
+ }
+ public virtual bool list_Q() { return false; }
}
public class MalConstant : MalVal {
@@ -127,6 +130,7 @@ namespace Mal {
}
public List<MalVal> getValue() { return value; }
+ public override bool list_Q() { return true; }
public override string ToString() {
return start + printer.join(value, " ", true) + end;
@@ -141,6 +145,16 @@ namespace Mal {
}
return this;
}
+
+ public int size() { return value.Count; }
+ public MalVal nth(int idx) { return value[idx]; }
+ public MalVal rest() {
+ if (size() > 0) {
+ return new MalList(value.GetRange(1, value.Count-1));
+ } else {
+ return new MalList();
+ }
+ }
}
public class MalVector : MalList {
@@ -164,6 +178,7 @@ namespace Mal {
return (MalVector)this.MemberwiseClone();
}
+ public override bool list_Q() { return false; }
}
public class MalHashMap : MalVal {
@@ -185,6 +200,8 @@ namespace Mal {
return (MalHashMap)this.MemberwiseClone();
}
+ public Dictionary<string, MalVal> getValue() { return value; }
+
public override string ToString() {
return "{" + printer.join(value, " ", true) + "}";
}
@@ -206,5 +223,9 @@ namespace Mal {
}
}
+ public abstract class MalFunction : MalVal {
+ public abstract MalVal apply(MalList args);
+ }
+
}
}