Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 22 additions & 0 deletions devel/210_10.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,28 @@
bin/goldfish tests/goldfish/liii/bag-test.scm
```


## 2026/01/30 实现 bag 更新/子集/集合运算接口
### What
补齐 SRFI-113 的 bag 更新、删除、搜索、子集关系与集合运算接口,并在 (liii bag) 中导出与补齐测试。

1. 在 goldfish/srfi/srfi-113.scm 中实现 bag-adjoin / bag-adjoin! / bag-replace / bag-replace! / bag-delete / bag-delete! / bag-delete-all / bag-delete-all! / bag-search!,以及 bag=? / bag<? / bag>? / bag<=? / bag>=? 与 bag-union / bag-intersection / bag-difference / bag-xor 及其线性更新版本,并添加到导出列表
2. 在 goldfish/liii/bag.scm 中导出以上函数
3. 在 tests/goldfish/liii/bag-test.scm 中添加详细注释与覆盖测试

### Why
提供多重集的增删改、搜索、包含关系与集合运算能力,覆盖 SRFI-113 对 bag 的核心语义。

### How
1. bag-adjoin!/bag-adjoin 对元素逐个计数 +1,前者就地修改,后者基于副本
2. bag-replace!/bag-replace 替换等价元素的代表值并保持计数不变
3. bag-delete!/bag-delete 逐个删除一个元素实例,前者就地修改,后者基于副本
4. bag-delete-all!/bag-delete-all 根据列表删除元素实例,列表含重复则多次删除
5. bag-search! 按 comparator 等价查找,命中/未命中分别调用 success/failure 并提供 insert/update/remove 操作
6. 子集关系按“计数包含”判断:每个元素计数满足 <= 或严格 < 关系
7. 相等性要求各元素计数一致
8. union 取计数最大值;intersection 取最小值;difference 按计数相减并截断为 0;xor 取计数绝对差

## 2026/01/29 实现 bag 查询与转换接口
### What
补齐 SRFI-113 的 bag 查询能力与复制/列表转换接口,并在 (liii bag) 中导出与补齐测试。
Expand Down
16 changes: 14 additions & 2 deletions goldfish/liii/bag.scm
Original file line number Diff line number Diff line change
Expand Up @@ -22,12 +22,24 @@
bag-unfold bag-member bag-comparator bag->list
list->bag! bag-copy
bag? bag-contains? bag-empty? bag-disjoint?
bag-size bag-find bag-count bag-any? bag-every?)
bag-size bag-find bag-count bag-any? bag-every?
bag=? bag<? bag>? bag<=? bag>=?
bag-union bag-intersection bag-difference bag-xor
bag-union! bag-intersection! bag-difference! bag-xor!
bag-adjoin bag-adjoin! bag-replace bag-replace!
bag-delete bag-delete! bag-delete-all bag-delete-all!
bag-search!)
(srfi srfi-128))
(export bag bag-unfold bag-member bag-comparator
bag->list list->bag list->bag! bag-copy
bag? bag-contains? bag-empty? bag-disjoint?
bag-size bag-find bag-count bag-any? bag-every?)
bag-size bag-find bag-count bag-any? bag-every?
bag=? bag<? bag>? bag<=? bag>=?
bag-union bag-intersection bag-difference bag-xor
bag-union! bag-intersection! bag-difference! bag-xor!
bag-adjoin bag-adjoin! bag-replace bag-replace!
bag-delete bag-delete! bag-delete-all bag-delete-all!
bag-search!)

(define comp (make-default-comparator))

Expand Down
Loading