diff options
| author | Joel Martin <github@martintribe.org> | 2014-04-06 22:38:26 -0500 |
|---|---|---|
| committer | Joel Martin <github@martintribe.org> | 2014-04-06 22:38:26 -0500 |
| commit | b56c49a12dad20c55fbf07775b536c9d656af313 (patch) | |
| tree | 11989cec7ac0bc5ce4cc3b1ea46c9948847cc044 /cs/types.cs | |
| parent | 53beaa0a6ddd9d8a5fb531f97c44a9c7129d1de7 (diff) | |
| download | mal-b56c49a12dad20c55fbf07775b536c9d656af313.tar.gz mal-b56c49a12dad20c55fbf07775b536c9d656af313.zip | |
C#: add step2_eval.
Diffstat (limited to 'cs/types.cs')
| -rw-r--r-- | cs/types.cs | 23 |
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); + } + } } |
