module orelang.operator.CdrOperator;
import orelang.operator.IOperator,
       orelang.Engine,
       orelang.Value;
import std.conv;

class CdrOperator : IOperator {
  /**
   * call
   */
  public Value call(Engine engine, Value[] args) {
    Value obj = engine.eval(args[0]);

    if (obj.type == ValueType.Array) {
      Value[] obx = obj.getArray;

      if (obx.length == 1) {
        Value[] arr;
        return new Value(arr);
      } else if (obx.length > 1) {
        return new Value(obx[1..$]);
      } else {
        throw new Error("pair required, but got ()");
      }
    } else {
      throw new Error("pair required, but got invalid data, the type of which is " ~ obj.type.to!string);
    }
  }
}