diff options
Diffstat (limited to 'final_project/work/generic-string-opers.scm')
-rw-r--r-- | final_project/work/generic-string-opers.scm | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/final_project/work/generic-string-opers.scm b/final_project/work/generic-string-opers.scm new file mode 100644 index 0000000..9855793 --- /dev/null +++ b/final_project/work/generic-string-opers.scm @@ -0,0 +1,46 @@ + +; STRING +(define capitalize (make-generic-operator 1 #f 'capitalize)) +(define downcase (make-generic-operator 1 #f 'downcase)) +(define upcase (make-generic-operator 1 #f 'upcase)) +(define string-length (make-generic-operator 1 #f 'length)) +(defhandler capitalize (lambda (x) (string-capitalize x)) string?) +(defhandler downcase (lambda (x) (string-downcase x)) string?) +(defhandler upcase (lambda (x) (string-upcase x)) string?) +(defhandler string-length (lambda (x) (string-length x)) string?) + +; STRING STRING +(define search-forward (make-generic-operator 2 #f 'search-forward)) +(define search-backward (make-generic-operator 2 #f 'search-backward)) +(define search-all (make-generic-operator 2 #f 'search-all)) +(define is-substring (make-generic-operator 2 #f 'substring?)) +(define match (make-generic-operator 2 #f 'match)) +(defhandler match (lambda (x y) (string-match-forward x y)) string? string?) +(defhandler search-forward (lambda (x y) (string-search-forward x y)) string? string?) +(defhandler search-all (lambda (x y) (string-search-all x y)) string? string?) +(defhandler search-backward (lambda (x y) (string-search-backward x y)) string? string?) +(defhandler is-substring (lambda (x y) (substring? x y)) string? string?) + +; NUMBER NUMBER +(define plus (make-generic-operator 2 #f '+)) +(define subtract (make-generic-operator 2 #f '-)) +(define mul (make-generic-operator 2 #f '*)) +(define divide (make-generic-operator 2 #f '/)) +(define are-equal (make-generic-operator 2 #f '=?)) +(defhandler plus (lambda (x y) (+ x y)) number? number?) +(defhandler subtract (lambda (x y) (- x y)) number? number?) +(defhandler mul (lambda (x y) (* x y)) number? number?) +(defhandler divide (lambda (x y) (/ x y)) number? number?) +(defhandler are-equal (lambda (x y) (= x y)) number? number?) + +; LIST +(define length2 (make-generic-operator 1 #f 'length)) +(define reverse1 (make-generic-operator 1 #f 'reverse)) +(define sort1 (make-generic-operator 1 #f 'sort)) +(defhandler length2 (lambda (x) (length x)) list?) +(defhandler reverse1 (lambda (x) (reverse x)) list?) +(defhandler sort1 (lambda (x) (sort x <)) list?) + +; BOOLEAN +(define not1 (make-generic-operator 1 #f 'not)) +(defhandler not1 (lambda (x) (not x)) boolean?) |