Files
hakorune/examples/lisp/cons_box_v2.nyash

117 lines
2.2 KiB
Plaintext
Raw Normal View History

// 📦 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!")