From 255e9d71d8626410fef9bdf7b3f952fe5822c035 Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Wed, 25 Mar 2015 17:52:42 -0400 Subject: [PATCH] Added char predicates --- trans.scm | 29 +++++++++++++++++------------ 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/trans.scm b/trans.scm index 24cf1664..d2293384 100644 --- a/trans.scm +++ b/trans.scm @@ -55,18 +55,23 @@ (define *Cyc-version-banner* ,*version-banner*) ;; TODO: The whitespace characters are space, tab, line feed, form feed (not in parser yet), and carriage return. (define call-with-current-continuation call/cc) -; TODO: (define (Cyc-bool-op cmp x lst) -; TODO: (cond -; TODO: ((null? lst) #t) -; TODO: ((cmp x (car lst)) -; TODO: (Cyc-bool-op (car lst) (cdr lst))) -; TODO: (else #f))) -; TODO: (define (char>? c1 c2 . cs) -; TODO: (Cyc-bool-op -; TODO: (lambda (x y) -; TODO: (> (char->integer x) (char->integer y))) -; TODO: c1 -; TODO: (cons c2 cs))) + (define (Cyc-bin-op cmp x lst) + (cond + ((null? lst) #t) + ((cmp x (car lst)) + (Cyc-bin-op cmp (car lst) (cdr lst))) + (else #f))) + (define (Cyc-bin-op-char cmp c cs) + (Cyc-bin-op + (lambda (x y) + (cmp (char->integer x) (char->integer y))) + c + cs)) + (define (char=? c1 c2 . cs) (Cyc-bin-op-char = c1 (cons c2 cs))) + (define (char? c1 c2 . cs) (Cyc-bin-op-char > c1 (cons c2 cs))) + (define (char<=? c1 c2 . cs) (Cyc-bin-op-char <= c1 (cons c2 cs))) + (define (char>=? c1 c2 . cs) (Cyc-bin-op-char >= c1 (cons c2 cs))) (define (char-whitespace? c) (member c '(#\tab #\space #\return #\newline))) (define (char-numeric? c) (member c '(#\0 #\1 #\2 #\3 #\4 #\5 #\6 #\7 #\8 #\9))) ; TODO: implement in terms of char>? procs ==> (define (char-upper-case? c)