public Node div(Node node) { Node n = node.eval(); if(!(node is NumberNode)){ throw new Exception("Right is not Number"); } return new NumberNode(Value/(((NumberNode)n).Value)); }
public Node plus(Node node) { Node n = node.eval(); if(!(node is StringNode)){ throw new UmiException("Right is not String"); } return new StringNode(Value+(((StringNode)n).Value)); }
public Node greater(Node node) { Node n = node.eval(); if(!(node is NumberNode)){ throw new Exception("Right is not Number"); } if(((NumberNode)n).Value < this.Value){ return new TrueNode(); }else{ return new FalseNode(); } }
public Node print(Node node) { if(node is ArgumentsNode){ Node s = null; for(int i=0;i<((ArgumentsNode)node).Length;i++){ s = send_message((((ArgumentsNode)node)[i]).eval(),null,"to_s"); Console.WriteLine(((StringNode)s).Value); } return s; }else{ Node s = send_message(node.eval(),null,"to_s"); Console.WriteLine(((StringNode)s).Value); return s; } return null; }
public Node assign(Node node) { Node n = node.eval(); Block.Set(name,n); return n; }