From 28231b199023ab723f5a8a34d5e72ce598c0b037 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B2=88=E8=BE=BE?= Date: Sat, 11 Jan 2025 16:15:21 +0000 Subject: [PATCH] !112 digit? for case-char in (liii lang) --- GoldfishLang.tmu | 264 ++++++++++++++++++++++++++++++ goldfish/liii/lang.scm | 22 +++ tests/goldfish/liii/lang-test.scm | 43 +++++ 3 files changed, 329 insertions(+) diff --git a/GoldfishLang.tmu b/GoldfishLang.tmu index 50bf89c..3954930 100644 --- a/GoldfishLang.tmu +++ b/GoldfishLang.tmu @@ -401,6 +401,270 @@ \; + + + + + 判断一个字符是否为数字。它支持所有 Unicode 标准中定义的数字字符,包括以下范围: + + ||| + 数字名称 + |<\cell> + 范围 + |<\cell> + 示例字符 + >| + + |<\cell> + - + |<\cell> + + >| + + |<\cell> + - + |<\cell> + + >| + + |<\cell> + - + |<\cell> + \; + >| + + |<\cell> + - + |<\cell> + \; + >| + + |<\cell> + - + |<\cell> + \; + >| + + |<\cell> + - + |<\cell> + \; + >| + + |<\cell> + - + |<\cell> + \; + >| + + |<\cell> + - + |<\cell> + \; + >| + + |<\cell> + - + |<\cell> + \; + >| + + |<\cell> + - + |<\cell> + \; + >| + + |<\cell> + - + |<\cell> + \; + >| + + |<\cell> + - + |<\cell> + \; + >| + + |<\cell> + - + |<\cell> + \; + >| + + |<\cell> + - + |<\cell> + \; + >| + + |<\cell> + - + |<\cell> + \; + >| + + |<\cell> + - + |<\cell> + \; + >| + + |<\cell> + - + |<\cell> + \; + >| + + |<\cell> + - + |<\cell> + \; + >| + + |<\cell> + - + |<\cell> + \; + >>>> + + <\goldfish-chunk|goldfish/liii/lang.scm|true|true> + (define (%digit?) + + \ \ (or + + \ \ \ (and (\= code-point 48) (\= code-point 57)) + + \ \ \ (and (\= code-point #xFF10) (\= code-point #xFF19)) + + \ \ \ (and (\= code-point #x0660) (\= code-point #x0669)) + + \ \ \ (and (\= code-point #x06F0) (\= code-point #x06F9)) + + \ \ \ (and (\= code-point #x0966) (\= code-point #x096F)) + + \ \ \ (and (\= code-point #x09E6) (\= code-point #x09EF)) + + \ \ \ (and (\= code-point #x0A66) (\= code-point #x0A6F)) + + \ \ \ (and (\= code-point #x0AE6) (\= code-point #x0AEF)) + + \ \ \ (and (\= code-point #x0B66) (\= code-point #x0B6F)) + + \ \ \ (and (\= code-point #x0BE6) (\= code-point #x0BEF)) + + \ \ \ (and (\= code-point #x0C66) (\= code-point #x0C6F)) + + \ \ \ (and (\= code-point #x0CE6) (\= code-point #x0CEF)) + + \ \ \ (and (\= code-point #x0D66) (\= code-point #x0D6F)) + + \ \ \ (and (\= code-point #x0E50) (\= code-point #x0E59)) + + \ \ \ (and (\= code-point #x0ED0) (\= code-point #x0ED9)) + + \ \ \ (and (\= code-point #x0F20) (\= code-point #x0F29)) + + \ \ \ (and (\= code-point #x1040) (\= code-point #x1049)) + + \ \ \ (and (\= code-point #x17E0) (\= code-point #x17E9)) + + \ \ \ (and (\= code-point #x1810) (\= code-point #x1819)))) + + \ \ + + + <\goldfish-chunk|tests/goldfish/liii/lang-test.scm|true|true> + (let ((char1 (case-char 48)) \ ;; ASCII '0' + + \ \ \ \ \ \ (char2 (case-char #xFF10)) \ ;; 全角 '0' + + \ \ \ \ \ \ (char3 (case-char #x0660)) \ ;; 阿拉伯数字 '٠' + + \ \ \ \ \ \ (char4 (case-char #x06F0)) \ ;; 扩展阿拉伯数字 '۰' + + \ \ \ \ \ \ (char5 (case-char #x0966)) \ ;; 印度数字 + + \ \ \ \ \ \ (char6 (case-char #x09E6)) \ ;; 孟加拉数字 + + \ \ \ \ \ \ (char7 (case-char #x0A66)) \ ;; 古尔穆奇数字 + + \ \ \ \ \ \ (char8 (case-char #x0AE6)) \ ;; 古吉拉特数字 + + \ \ \ \ \ \ (char9 (case-char #x0B66)) \ ;; 奥里亚数字 + + \ \ \ \ \ \ (char10 (case-char #x0BE6)) \ ;; 泰米尔数字 + + \ \ \ \ \ \ (char11 (case-char #x0C66)) \ ;; 泰卢固数字 + + \ \ \ \ \ \ (char12 (case-char #x0CE6)) \ ;; 卡纳达数字\ + + \ \ \ \ \ \ (char13 (case-char #x0D66)) \ ;; 马拉雅拉姆数字 + + \ \ \ \ \ \ (char14 (case-char #x0E50)) \ ;; 泰文数字 '๐' + + \ \ \ \ \ \ (char15 (case-char #x0ED0)) \ ;; 老挝数字 + + \ \ \ \ \ \ (char16 (case-char #x0F20)) \ ;; 藏文数字 + + \ \ \ \ \ \ (char17 (case-char #x1040)) \ ;; 缅甸数字 '၀' + + \ \ \ \ \ \ (char18 (case-char #x17E0)) \ ;; 高棉数字 '០' + + \ \ \ \ \ \ (char19 (case-char #x1810)) \ ;; 蒙古数字 '᠐' + + \ \ \ \ \ \ (char20 (case-char 65))) \ ;; ASCII 'A' + + \; + + \ \ ;; 测试 %digit? + + \ \ (check (char1 :digit?) =\ #t) \ ;; ASCII 数字 + + \ \ (check (char2 :digit?) =\ #t) \ ;; 全角数字 + + \ \ (check (char3 :digit?) =\ #t) \ ;; 阿拉伯数字 + + \ \ (check (char4 :digit?) =\ #t) \ ;; 扩展阿拉伯数字 + + \ \ (check (char5 :digit?) =\ #t) \ ;; 印度数字 + + \ \ (check (char6 :digit?) =\ #t) \ ;; 孟加拉数字 + + \ \ (check (char7 :digit?) =\ #t) \ ;; 古尔穆奇数字 + + \ \ (check (char8 :digit?) =\ #t) \ ;; 古吉拉特数字 + + \ \ (check (char9 :digit?) =\ #t) \ ;; 奥里亚数字 + + \ \ (check (char10 :digit?) =\ #t) \ ;; 泰米尔数字 + + \ \ (check (char11 :digit?) =\ #t) \ ;; 泰卢固数字 + + \ \ (check (char12 :digit?) =\ #t) \ ;; 卡纳达数字 + + \ \ (check (char13 :digit?) =\ #t) \ ;; 马拉雅拉姆数字 + + \ \ (check (char14 :digit?) =\ #t) \ ;; 泰文数字 + + \ \ (check (char15 :digit?) =\ #t) \ ;; 老挝数字 + + \ \ (check (char16 :digit?) =\ #t) \ ;; 藏文数字 + + \ \ (check (char17 :digit?) =\ #t) \ ;; 缅甸数字 + + \ \ (check (char18 :digit?) =\ #t) \ ;; 高棉数字 + + \ \ (check (char19 :digit?) =\ #t) \ ;; 蒙古数字 + + \ \ (check (char20 :digit?) =\ #f)) \ ;; 非数字字符 + + \; + + + + <\goldfish-chunk|goldfish/liii/lang.scm|true|true> diff --git a/goldfish/liii/lang.scm b/goldfish/liii/lang.scm index 160c401..0064070 100644 --- a/goldfish/liii/lang.scm +++ b/goldfish/liii/lang.scm @@ -88,6 +88,28 @@ (define-case-class case-char ((code-point integer?)) +(define (%digit?) + (or + (and (>= code-point 48) (<= code-point 57)) + (and (>= code-point #xFF10) (<= code-point #xFF19)) + (and (>= code-point #x0660) (<= code-point #x0669)) + (and (>= code-point #x06F0) (<= code-point #x06F9)) + (and (>= code-point #x0966) (<= code-point #x096F)) + (and (>= code-point #x09E6) (<= code-point #x09EF)) + (and (>= code-point #x0A66) (<= code-point #x0A6F)) + (and (>= code-point #x0AE6) (<= code-point #x0AEF)) + (and (>= code-point #x0B66) (<= code-point #x0B6F)) + (and (>= code-point #x0BE6) (<= code-point #x0BEF)) + (and (>= code-point #x0C66) (<= code-point #x0C6F)) + (and (>= code-point #x0CE6) (<= code-point #x0CEF)) + (and (>= code-point #x0D66) (<= code-point #x0D6F)) + (and (>= code-point #x0E50) (<= code-point #x0E59)) + (and (>= code-point #x0ED0) (<= code-point #x0ED9)) + (and (>= code-point #x0F20) (<= code-point #x0F29)) + (and (>= code-point #x1040) (<= code-point #x1049)) + (and (>= code-point #x17E0) (<= code-point #x17E9)) + (and (>= code-point #x1810) (<= code-point #x1819)))) + (define (%to-bytevector) (cond ((<= code-point #x7F) diff --git a/tests/goldfish/liii/lang-test.scm b/tests/goldfish/liii/lang-test.scm index 28cb74e..6f4a4dd 100644 --- a/tests/goldfish/liii/lang-test.scm +++ b/tests/goldfish/liii/lang-test.scm @@ -72,6 +72,49 @@ (check-catch 'value-error ((box #x110000) :to-char)) +(let ((char1 (case-char 48)) ;; ASCII '0' + (char2 (case-char #xFF10)) ;; 全角 '0' + (char3 (case-char #x0660)) ;; 阿拉伯数字 '٠' + (char4 (case-char #x06F0)) ;; 扩展阿拉伯数字 '۰' + (char5 (case-char #x0966)) ;; 印度数字 + (char6 (case-char #x09E6)) ;; 孟加拉数字 + (char7 (case-char #x0A66)) ;; 古尔穆奇数字 + (char8 (case-char #x0AE6)) ;; 古吉拉特数字 + (char9 (case-char #x0B66)) ;; 奥里亚数字 + (char10 (case-char #x0BE6)) ;; 泰米尔数字 + (char11 (case-char #x0C66)) ;; 泰卢固数字 + (char12 (case-char #x0CE6)) ;; 卡纳达数字 + (char13 (case-char #x0D66)) ;; 马拉雅拉姆数字 + (char14 (case-char #x0E50)) ;; 泰文数字 '๐' + (char15 (case-char #x0ED0)) ;; 老挝数字 + (char16 (case-char #x0F20)) ;; 藏文数字 + (char17 (case-char #x1040)) ;; 缅甸数字 '၀' + (char18 (case-char #x17E0)) ;; 高棉数字 '០' + (char19 (case-char #x1810)) ;; 蒙古数字 '᠐' + (char20 (case-char 65))) ;; ASCII 'A' + + ;; 测试 %digit? + (check (char1 :digit?) => #t) ;; ASCII 数字 + (check (char2 :digit?) => #t) ;; 全角数字 + (check (char3 :digit?) => #t) ;; 阿拉伯数字 + (check (char4 :digit?) => #t) ;; 扩展阿拉伯数字 + (check (char5 :digit?) => #t) ;; 印度数字 + (check (char6 :digit?) => #t) ;; 孟加拉数字 + (check (char7 :digit?) => #t) ;; 古尔穆奇数字 + (check (char8 :digit?) => #t) ;; 古吉拉特数字 + (check (char9 :digit?) => #t) ;; 奥里亚数字 + (check (char10 :digit?) => #t) ;; 泰米尔数字 + (check (char11 :digit?) => #t) ;; 泰卢固数字 + (check (char12 :digit?) => #t) ;; 卡纳达数字 + (check (char13 :digit?) => #t) ;; 马拉雅拉姆数字 + (check (char14 :digit?) => #t) ;; 泰文数字 + (check (char15 :digit?) => #t) ;; 老挝数字 + (check (char16 :digit?) => #t) ;; 藏文数字 + (check (char17 :digit?) => #t) ;; 缅甸数字 + (check (char18 :digit?) => #t) ;; 高棉数字 + (check (char19 :digit?) => #t) ;; 蒙古数字 + (check (char20 :digit?) => #f)) ;; 非数字字符 + (check (((case-char #x41) :to-string) :unbox) => "A") (check (((case-char #xA3) :to-string) :unbox) => "£") (check (((case-char #x4E2D) :to-string) :unbox) => "中")