Beispiel #1
0
        public override void RegisterClassMessages()
        {
            base.RegisterClassMessages();

            classMessages["min".get()] = (_, _) => Int.IntObject(int.MinValue);
            classMessages["max".get()] = (_, _) => Int.IntObject(int.MaxValue);
            classMessages["parse"]     = (_, msg) => parse(msg.Arguments[0].AsString);
        }
Beispiel #2
0
        public Sequence(int count, IObject offset) : base((ICollection)Array.Empty)
        {
            this.count  = count;
            factor      = Int.IntObject(1);
            this.offset = offset;

            i = 0;
        }
Beispiel #3
0
        public override IMatched <IObject> Execute(Machine machine, IObject x, IObject y)
        {
            if (x is INumeric n1 && y is INumeric n2 && n1.IsPrimitive && n2.IsPrimitive)
            {
                var dx = n1.AsInt32();
                var dy = n2.AsInt32();

                return(Int.IntObject(dx / dy).Matched());
            }
Beispiel #4
0
 public override IMatched <IObject> Execute(Machine machine, IObject value)
 {
     if (value is Int i)
     {
         return(Int.IntObject(~i.Value).Matched());
     }
     else
     {
         return(failedMatch <IObject>(incompatibleClasses(value, "Int")));
     }
 }
Beispiel #5
0
 public override IMaybe <IObject> Next()
 {
     if (i < count)
     {
         return(Int.IntObject(i++ *factor + offset).Some());
     }
     else
     {
         return(none <IObject>());
     }
 }
Beispiel #6
0
 public override IMatched <IObject> Execute(Machine machine, IObject x, IObject y)
 {
     if (x is IObjectCompare cx)
     {
         return(Int.IntObject(cx.Compare(y)).Matched());
     }
     else
     {
         return(sendMessage(x, "<>", y).Matched());
     }
 }
Beispiel #7
0
 public static IObject parse(string value)
 {
     try
     {
         var number = int.Parse(value.Replace("_", ""));
         return(Success.Object(Int.IntObject(number)));
     }
     catch (Exception exception)
     {
         return(Failure.Object(exception.Message));
     }
 }
Beispiel #8
0
 public override IMaybe <IObject> Next()
 {
     if (i < count)
     {
         var result = sendMessage(Int.IntObject(i++), "*", factor);
         result = sendMessage(result, "+", offset);
         return(result.Some());
     }
     else
     {
         return(none <IObject>());
     }
 }
Beispiel #9
0
        public override IMaybe <IObject> Next()
        {
            var result = base.Next();

            if (result.If(out var value))
            {
                var newIndex = Int.IntObject(index - 1);
                var x        = new NameValue("index", newIndex);
                var y        = new NameValue("value", value);
                return(Tuple.NewTuple(x, y).Some());
            }
            else
            {
                return(result);
            }
        }
Beispiel #10
0
 public virtual void RegisterMessages()
 {
     registerMessage("string".get(), (obj, _) => String.StringObject(obj.AsString));
     registerMessage("image".get(), (obj, _) => String.StringObject(obj.Image));
     registerMessage("hash".get(), (obj, _) => Int.IntObject(obj.Hash));
     registerMessage("equals(_)", (obj, _) => Boolean.BooleanObject(obj.IsEqualTo(_.Arguments[0])));
     registerMessage("className".get(), (obj, _) => String.StringObject(obj.ClassName));
     registerMessage("class".get(), (obj, _) => new Class(obj.ClassName));
     registerMessage("match(_)", match);
     messages["isNumber".get()] = (_, _) => Boolean.False;
     registerMessage("send(_,_)",
                     (obj, _) => function <IObject, String>(obj, _, (o, n) => sendMessage(o, n.Value, _.Arguments.Pass(1))));
     registerMessage("respondsTo(_)", (obj, _) => (Boolean)classOf(obj).RespondsTo(_.Arguments[0].AsString));
     registerMessage("seq(_)", (obj, _) => new OpenRange(obj, (Lambda)_.Arguments[0]));
     registerMessage("format(_)", (obj, _) => format(obj, _.Arguments[0].AsString));
 }
Beispiel #11
0
        public static IMatched <IObject> Evaluate(INumeric x)
        {
            switch (x)
            {
            case Int i:
                return(Int.IntObject(-i.Value).Matched());

            case Float f:
                return(Float.FloatObject(-f.Value).Matched());

            case Long l:
                return(Long.LongObject(-l.Value).Matched());

            case Complex c:
                return(c.Negate().Matched());

            case Rational r:
                return(r.Negate().Matched());

            default:
                return(failedMatch <IObject>(notNumeric((IObject)x)));
            }
        }
Beispiel #12
0
 public IObject Parse(string source) => Int.IntObject(source.ToInt());
Beispiel #13
0
 public IObject Times(int count)
 {
     return(new Objects.Tuple(Enumerable.Range(0, count).Select(_ => Int.IntObject(random.Next())).ToArray()));
 }
Beispiel #14
0
 public IMaybe <IObject> Peek(int index) => Int.IntObject(random.Next()).Some();
Beispiel #15
0
 IMaybe <IObject> ICollection.Next(int index) => Int.IntObject(random.Next()).Some();