From 5d69b6794b543d9e3ef60fcf6b215d8febe06857 Mon Sep 17 00:00:00 2001 From: wumo Date: Wed, 25 Mar 2026 08:59:20 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E6=96=B0=E5=A2=9E=20string-contains=3F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- README_ZH.md | 2 +- devel/210_31.md | 3 +++ goldfish/liii/rich-string.scm | 8 +++--- goldfish/liii/string.scm | 9 +++++-- tests/goldfish/liii/string-test.scm | 42 +++++++++++++++++++++++++++++ 6 files changed, 58 insertions(+), 8 deletions(-) create mode 100644 devel/210_31.md diff --git a/README.md b/README.md index 48d83a78..9dbfd0b4 100644 --- a/README.md +++ b/README.md @@ -86,7 +86,7 @@ Just like S7 Scheme, [src/goldfish.hpp](src/goldfish.hpp) and [src/goldfish.cpp] | [(liii case)](goldfish/liii/case.scm) | Pattern matching | `case*` | | [(liii list)](goldfish/liii/list.scm) | List Library | `list-view`, `fold` | | [(liii bitwise)](goldfish/liii/bitwise.scm) | Bitwise Library | `bitwise-and`, `bitwise-or` | -| [(liii string)](goldfish/liii/string.scm) | String Library | `string-join` | +| [(liii string)](goldfish/liii/string.scm) | String Library | `string-join`, `string-contains?` | | [(liii vector)](goldfish/liii/vector.scm) | Vector Library | `vector-index` | | [(liii hash-table)](goldfish/liii/hash-table.scm) | Hash Table Library | `hash-table-empty?`, `hash-table-contains?` | | [(liii sys)](goldfish/liii/sys.scm) | Library looks like Python sys module | `argv` | diff --git a/README_ZH.md b/README_ZH.md index 32053c6d..d1a11675 100644 --- a/README_ZH.md +++ b/README_ZH.md @@ -87,7 +87,7 @@ | [(liii case)](goldfish/liii/case.scm) | 模式匹配 | `case*` | | [(liii list)](goldfish/liii/list.scm) | 列表函数库 | `list-view`, `fold` | | [(liii bitwise)](goldfish/liii/bitwise.scm) | 位运算函数库 | `bitwise-and`, `bitwise-or` | -| [(liii string)](goldfish/liii/string.scm) | 字符串函数库 | `string-join` | +| [(liii string)](goldfish/liii/string.scm) | 字符串函数库 | `string-join`, `string-contains?` | | [(liii vector)](goldfish/liii/vector.scm) | 向量函数库 | `vector-index` | | [(liii hash-table)](goldfish/liii/hash-table.scm) | 哈希表 | `hash-table-empty?`, `hash-table-contains?` | | [(liii sys)](goldfish/liii/sys.scm) | 库类似于 Python 的 `sys` 模块 | `argv` | diff --git a/devel/210_31.md b/devel/210_31.md new file mode 100644 index 00000000..279896e9 --- /dev/null +++ b/devel/210_31.md @@ -0,0 +1,3 @@ +# [210_31] + +## 2026/03/25 新增 string-contains? \ No newline at end of file diff --git a/goldfish/liii/rich-string.scm b/goldfish/liii/rich-string.scm index c7f6a01a..79cb9a53 100644 --- a/goldfish/liii/rich-string.scm +++ b/goldfish/liii/rich-string.scm @@ -166,18 +166,18 @@ (define (%contains elem) (cond ((rich-string :is-type-of elem) - (string-contains data (elem :get))) + (string-contains? data (elem :get))) ((string? elem) - (string-contains data elem) + (string-contains? data elem) ) ; ((rich-char :is-type-of elem) - (string-contains data (elem :make-string)) + (string-contains? data (elem :make-string)) ) ; ((char? elem) - (string-contains data (string elem)) + (string-contains? data (string elem)) ) ; (else (type-error "elem must be char or string")) diff --git a/goldfish/liii/string.scm b/goldfish/liii/string.scm index 4b06f695..02a406de 100644 --- a/goldfish/liii/string.scm +++ b/goldfish/liii/string.scm @@ -33,7 +33,7 @@ string-reverse string-tokenize ; Liii extras - string-starts? string-ends? + string-starts? string-contains? string-ends? string-remove-prefix string-remove-suffix ) ;export (import (srfi srfi-13) @@ -49,6 +49,12 @@ ) ;if ) ;define + (define string-contains? + (typed-lambda ((str string?) (sub-str string?)) + (string-contains str sub-str) + ) ;typed-lambda + ) ;define + (define (string-ends? str suffix) (if (and (string? str) (string? suffix)) (string-suffix? suffix str) @@ -76,4 +82,3 @@ ) ;begin ) ;define-library - diff --git a/tests/goldfish/liii/string-test.scm b/tests/goldfish/liii/string-test.scm index c27f58db..04a4dde6 100644 --- a/tests/goldfish/liii/string-test.scm +++ b/tests/goldfish/liii/string-test.scm @@ -1863,6 +1863,48 @@ out-of-range 当start/end超出字符串索引范围时 (check-true (string-contains "0123456789" "34")) (check-false (string-contains "0123456789" "24")) +#| +string-contains? +检查字符串是否包含指定子串。 + +语法 +---- +(string-contains? str sub-str) + +参数 +---- +str : string? +要检查的源字符串。 + +sub-str : string? +要查找的子串。 + +返回值 +---- +boolean +如果str包含sub-str返回#t,否则返回#f。 + +注意 +---- +`string-contains?` 是 `string-contains` 的谓词风格别名,更符合布尔判定 API 的命名直觉。 +空字符串作为sub-str时总是返回#t。 + +错误处理 +---- +type-error 当参数不是字符串类型时。 +|# + +(check-true (string-contains? "0123456789" "3")) +(check-true (string-contains? "0123456789" "34")) +(check-false (string-contains? "0123456789" "24")) +(check-true (string-contains? "" "")) +(check-true (string-contains? "hello" "")) +(check-false (string-contains? "" "a")) +(check-true (string-contains? "中文测试" "文测")) +(check-false (string-contains? "Hello" "hello")) +(check-catch 'type-error (string-contains? 123 "1")) +(check-catch 'type-error (string-contains? "123" 1)) + #| string-count 统计字符串中满足指定条件的字符数量。 From 49e097155a2845fef8578e5d6c273c9c6dd7d33b Mon Sep 17 00:00:00 2001 From: wumo Date: Wed, 25 Mar 2026 09:02:14 +0800 Subject: [PATCH 2/2] wip --- README.md | 4 ++-- README_ZH.md | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 9dbfd0b4..d88ec1e5 100644 --- a/README.md +++ b/README.md @@ -86,7 +86,7 @@ Just like S7 Scheme, [src/goldfish.hpp](src/goldfish.hpp) and [src/goldfish.cpp] | [(liii case)](goldfish/liii/case.scm) | Pattern matching | `case*` | | [(liii list)](goldfish/liii/list.scm) | List Library | `list-view`, `fold` | | [(liii bitwise)](goldfish/liii/bitwise.scm) | Bitwise Library | `bitwise-and`, `bitwise-or` | -| [(liii string)](goldfish/liii/string.scm) | String Library | `string-join`, `string-contains?` | +| [(liii string)](goldfish/liii/string.scm) | String Library | `string-join` | | [(liii vector)](goldfish/liii/vector.scm) | Vector Library | `vector-index` | | [(liii hash-table)](goldfish/liii/hash-table.scm) | Hash Table Library | `hash-table-empty?`, `hash-table-contains?` | | [(liii sys)](goldfish/liii/sys.scm) | Library looks like Python sys module | `argv` | @@ -264,4 +264,4 @@ The reader can cite our work with the following BibTeX entry: year = {2024}, url = {https://github.com/LiiiLabs/goldfish/releases/download/v17.10.9/Goldfish.pdf} } -``` +``` \ No newline at end of file diff --git a/README_ZH.md b/README_ZH.md index d1a11675..b158f2f4 100644 --- a/README_ZH.md +++ b/README_ZH.md @@ -87,7 +87,7 @@ | [(liii case)](goldfish/liii/case.scm) | 模式匹配 | `case*` | | [(liii list)](goldfish/liii/list.scm) | 列表函数库 | `list-view`, `fold` | | [(liii bitwise)](goldfish/liii/bitwise.scm) | 位运算函数库 | `bitwise-and`, `bitwise-or` | -| [(liii string)](goldfish/liii/string.scm) | 字符串函数库 | `string-join`, `string-contains?` | +| [(liii string)](goldfish/liii/string.scm) | 字符串函数库 | `string-join` | | [(liii vector)](goldfish/liii/vector.scm) | 向量函数库 | `vector-index` | | [(liii hash-table)](goldfish/liii/hash-table.scm) | 哈希表 | `hash-table-empty?`, `hash-table-contains?` | | [(liii sys)](goldfish/liii/sys.scm) | 库类似于 Python 的 `sys` 模块 | `argv` | @@ -269,4 +269,4 @@ based on S7 Scheme 11.5 (22-Sep-2025) year = {2024}, url = {https://gitee.com/LiiiLabs/goldfish/releases/download/v17.10.9/Goldfish.pdf} } -``` +``` \ No newline at end of file