~ chicken-r7rs (master) 512aecce2618e5c64db80dbcc5ca3c46359b6cf8
commit 512aecce2618e5c64db80dbcc5ca3c46359b6cf8 Author: Evan Hanson <evhan@foldling.org> AuthorDate: Thu Oct 24 22:11:56 2013 +0000 Commit: Evan Hanson <evhan@foldling.org> CommitDate: Thu Oct 24 22:11:56 2013 +0000 Stub scheme.char, add char-ci*? & string-ci*? comparators diff --git a/r7rs.setup b/r7rs.setup index b152b3d..a8926c3 100644 --- a/r7rs.setup +++ b/r7rs.setup @@ -4,7 +4,7 @@ (use make srfi-1) (define scheme-modules - '("process-context" "eval" "cxr" "complex" "inexact" "load" "file" "read")) ;XXX + '("process-context" "eval" "cxr" "complex" "inexact" "load" "file" "read" "char")) ;XXX (make (("r7rs-compile-time.so" ("r7rs-compile-time.scm" "r7rs-compile-time-module.scm") (compile -s -O3 -d1 r7rs-compile-time-module.scm -J -o r7rs-compile-time.so) diff --git a/scheme.char.scm b/scheme.char.scm new file mode 100644 index 0000000..3c1db5d --- /dev/null +++ b/scheme.char.scm @@ -0,0 +1,52 @@ +(module scheme.char (char-ci=? char-ci<? char-ci>? char-ci<=? char-ci>=? + string-ci=? string-ci<? string-ci>? string-ci<=? string-ci>=?) + +(import + (except scheme + char-ci=? char-ci<? char-ci>? char-ci<=? char-ci>=? + string-ci=? string-ci<? string-ci>? string-ci<=? string-ci>=?) + (prefix + (only scheme + char-ci=? char-ci<? char-ci>? char-ci<=? char-ci>=? + string-ci=? string-ci<? string-ci>? string-ci<=? string-ci>=?) + %)) + +(import chicken) + +;; Copy-pasta from scheme.base.scm. +(define-syntax define-extended-arity-comparator + (syntax-rules () + ((_ name comparator check-type) + (define name + (let ((c comparator)) + (lambda (o1 o2 . os) + (check-type o1 'name) + (let lp ((o1 o1) (o2 o2) (os os) (eq #t)) + (check-type o2 'name) + (if (null? os) + (and eq (c o1 o2)) + (lp o2 (car os) (cdr os) (and eq (c o1 o2))))))))))) + +(: char-ci=? (char char #!rest char -> boolean)) +(: char-ci<? (char char #!rest char -> boolean)) +(: char-ci>? (char char #!rest char -> boolean)) +(: char-ci<=? (char char #!rest char -> boolean)) +(: char-ci>=? (char char #!rest char -> boolean)) + +(define-extended-arity-comparator char-ci=? %char-ci=? ##sys#check-char) +(define-extended-arity-comparator char-ci<? %char-ci<? ##sys#check-char) +(define-extended-arity-comparator char-ci>? %char-ci>? ##sys#check-char) +(define-extended-arity-comparator char-ci<=? %char-ci<=? ##sys#check-char) +(define-extended-arity-comparator char-ci>=? %char-ci>=? ##sys#check-char) + +(: string-ci=? (string string #!rest string -> boolean)) +(: string-ci<? (string string #!rest string -> boolean)) +(: string-ci>? (string string #!rest string -> boolean)) +(: string-ci<=? (string string #!rest string -> boolean)) +(: string-ci>=? (string string #!rest string -> boolean)) + +(define-extended-arity-comparator string-ci=? %string-ci=? ##sys#check-string) +(define-extended-arity-comparator string-ci<? %string-ci<? ##sys#check-string) +(define-extended-arity-comparator string-ci>? %string-ci>? ##sys#check-string) +(define-extended-arity-comparator string-ci<=? %string-ci<=? ##sys#check-string) +(define-extended-arity-comparator string-ci>=? %string-ci>=? ##sys#check-string))Trap