// 📦 ConsBox - LISPのcons cell実装 v2
// ファクトリー関数アプローチ

box ConsBox {
    car
    cdr
    
    init {
        car, cdr
    }
    
    func getCar() {
        return me.car
    }
    
    func getCdr() {
        return me.cdr
    }
    
    func setCar(value) {
        me.car = value
    }
    
    func setCdr(value) {
        me.cdr = value
    }
    
    // シンプルな文字列表現
    func toString() {
        carStr = "nil"
        if (not NullBox.check_null(me.car)) {
            carStr = me.car + ""
        }
        
        cdrStr = "nil"  
        if (not NullBox.check_null(me.cdr)) {
            cdrStr = me.cdr + ""
        }
        
        return "(" + carStr + " . " + cdrStr + ")"
    }
}

// ファクトリー関数：cons
function cons(car, cdr) {
    result = new ConsBox()
    result.car = car
    result.cdr = cdr
    return result
}

// ファクトリー関数：リスト作成
function list1(a) {
    return cons(a, new NullBox())
}

function list2(a, b) {
    return cons(a, cons(b, new NullBox()))
}

function list3(a, b, c) {
    return cons(a, cons(b, cons(c, new NullBox())))
}

// car/cdr アクセサ関数
function car(pair) {
    return pair.getCar()
}

function cdr(pair) {
    return pair.getCdr()
}

// テストコード
print("🎯 === ConsBox v2 Test ===")
print("")

// 基本的なペア
print("1. Basic cons cell:")
pair1 = cons(1, 2)
print("   (cons 1 2) = " + pair1.toString())

// リスト作成
print("")
print("2. List creation:")
list_a = list1("hello")
print("   (list1 'hello') = " + list_a.toString())

list_b = list2(10, 20)
print("   (list2 10 20) = " + list_b.toString())

list_c = list3("a", "b", "c")
print("   (list3 'a' 'b' 'c') = " + list_c.toString())

// car/cdr操作
print("")
print("3. car/cdr operations:")
test = cons(42, "world")
print("   test = " + test.toString())
print("   (car test) = " + car(test))
print("   (cdr test) = " + cdr(test))

// ネストしたリスト
print("")
print("4. Nested lists:")
inner = list2(1, 2)
outer = cons(inner, list1(3))
print("   ((1 2) 3) = " + outer.toString())

// 空リスト
print("")
print("5. Empty list:")
empty = new NullBox()
print("   '() = " + empty)

print("")
print("✅ ConsBox v2 tests completed!")