Files
hakorune/examples/lisp/cons_box_v2.hako

117 lines
2.2 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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