aether-azathoth 0.5.3

A lightweight, embeddable domain-specific language (DSL) interpreter with rich standard library
Documentation
// stdlib/examples/set_demo.aether
// Set(集合)数据结构示例

PRINTLN("=== Aether Set(集合)示例 ===")
PRINTLN("")

// 创建集合
PRINTLN("1. 创建集合")
Set SET1 SET_NEW()
PRINTLN("空集合: " + SET_TO_STRING(SET1))

// 添加元素
Set SET1 SET_ADD(SET1, 1)
Set SET1 SET_ADD(SET1, 2)
Set SET1 SET_ADD(SET1, 3)
Set SET1 SET_ADD(SET1, 2)  // 重复元素不会被添加
PRINTLN("添加元素后: " + SET_TO_STRING(SET1))
PRINTLN("")

// 从数组创建集合
PRINTLN("2. 从数组创建集合")
Set ARR [1, 2, 3, 2, 4, 3, 5]
Set SET2 SET_FROM_ARRAY(ARR)
PRINTLN("原数组: " + TO_STRING(ARR))
PRINTLN("去重后的集合: " + SET_TO_STRING(SET2))
PRINTLN("")

// 基本操作
PRINTLN("3. 基本操作")
PRINTLN("集合大小: " + TO_STRING(SET_SIZE(SET2)))
PRINTLN("是否包含 3: " + TO_STRING(SET_CONTAINS(SET2, 3)))
PRINTLN("是否包含 10: " + TO_STRING(SET_CONTAINS(SET2, 10)))

Set SET2 SET_REMOVE(SET2, 3)
PRINTLN("移除 3 后: " + SET_TO_STRING(SET2))
PRINTLN("")

// 集合运算
PRINTLN("4. 集合运算")
Set SET_A SET_FROM_ARRAY([1, 2, 3, 4, 5])
Set SET_B SET_FROM_ARRAY([4, 5, 6, 7, 8])

PRINTLN("集合 A: " + SET_TO_STRING(SET_A))
PRINTLN("集合 B: " + SET_TO_STRING(SET_B))
PRINTLN("")

Set UNION SET_UNION(SET_A, SET_B)
PRINTLN("并集 A ∪ B: " + SET_TO_STRING(UNION))

Set INTERSECTION SET_INTERSECTION(SET_A, SET_B)
PRINTLN("交集 A ∩ B: " + SET_TO_STRING(INTERSECTION))

Set DIFFERENCE SET_DIFFERENCE(SET_A, SET_B)
PRINTLN("差集 A - B: " + SET_TO_STRING(DIFFERENCE))

Set SYM_DIFF SET_SYMMETRIC_DIFFERENCE(SET_A, SET_B)
PRINTLN("对称差集: " + SET_TO_STRING(SYM_DIFF))
PRINTLN("")

// 集合关系
PRINTLN("5. 集合关系")
Set SET_C SET_FROM_ARRAY([2, 3, 4])
PRINTLN("集合 C: " + SET_TO_STRING(SET_C))
PRINTLN("C 是 A 的子集: " + TO_STRING(SET_IS_SUBSET(SET_C, SET_A)))
PRINTLN("A 是 C 的超集: " + TO_STRING(SET_IS_SUPERSET(SET_A, SET_C)))
PRINTLN("A 和 B 不相交: " + TO_STRING(SET_IS_DISJOINT(SET_A, SET_B)))
PRINTLN("")

// 高级操作
PRINTLN("6. 过滤和映射")
Set NUMBERS SET_FROM_ARRAY([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
PRINTLN("原集合: " + SET_TO_STRING(NUMBERS))

// 定义过滤函数:保留偶数
Func IS_EVEN(N) {
    Return (N % 2 == 0)
}

Set EVENS SET_FILTER(NUMBERS, IS_EVEN)
PRINTLN("偶数集合: " + SET_TO_STRING(EVENS))

// 定义映射函数:平方
Func SQUARE(N) {
    Return (N * N)
}

Set SQUARES SET_MAP(SET_FROM_ARRAY([1, 2, 3, 4, 5]), SQUARE)
PRINTLN("平方集合: " + SET_TO_STRING(SQUARES))

PRINTLN("")
PRINTLN("=== 示例完成 ===")