// 📝 SymbolBox - LISP symbol（変数名・関数名）実装

box SymbolBox {
    name
    
    init { name }
    
    // コンストラクタ
    SymbolBox(symbolName) {
        me.name = symbolName
    }
    
    getName() { return me.name }
    setName(newName) { me.name = newName }
    
    toString() { return me.name }
    
    // シンボル同士の比較
    equals(other) {
        if other == NIL { return false }
        // SymbolBoxかチェック（簡易版）
        if me.isSymbolBox(other) {
            return me.name == other.name
        }
        return false
    }
    
    // SymbolBoxかどうかをチェック（簡易版）
    isSymbolBox(obj) {
        if obj == NIL { return false }
        if obj == 0 { return false }
        if obj == 1 { return false }
        if obj == 2 { return false }
        if obj == 3 { return false }
        if obj == 4 { return false }
        if obj == 5 { return false }
        if obj == 6 { return false }
        if obj == 7 { return false }
        if obj == 8 { return false }
        if obj == 9 { return false }
        // 文字列は除外
        if obj == "a" { return false }
        if obj == "b" { return false }
        if obj == "c" { return false }
        if obj == "" { return false }
        if obj == "nil" { return false }
        if obj == "+" { return false }
        if obj == "-" { return false }
        if obj == "*" { return false }
        if obj == "/" { return false }
        // それ以外はSymbolBoxと仮定
        return true
    }
}

// 便利関数
function symbol(name) {
    return new SymbolBox(name)
}

// グローバル定数
NIL = 0

// テスト
print("=== SymbolBox Test ===")
print("")

// 基本的なシンボル作成
print("1. Basic symbol creation:")
s1 = new SymbolBox("foo")
print("   new SymbolBox('foo') = " + s1.toString())
s2 = symbol("bar")
print("   symbol('bar') = " + s2.toString())

print("")
print("2. Symbol comparison:")
s3 = symbol("foo")
s4 = symbol("bar")
print("   symbol('foo') == symbol('foo'): " + s1.equals(s3))
print("   symbol('foo') == symbol('bar'): " + s1.equals(s4))

print("")
print("3. Symbol properties:")
print("   s1.name = " + s1.getName())
print("   s2.name = " + s2.getName())

print("")
print("✅ SymbolBox test done!")