diff --git a/goldfish/liii/base.scm b/goldfish/liii/base.scm index 8daf379..ae77e33 100644 --- a/goldfish/liii/base.scm +++ b/goldfish/liii/base.scm @@ -15,7 +15,7 @@ ; (define-library (liii base) -(export == != display*) +(export == != display* in?) (begin (define == equal?) @@ -26,5 +26,18 @@ (define (display* . params) (for-each display params)) +(define (in? elem l) + (cond ((list? l) (not (not (member elem l)))) + ((vector? l) + (let loop ((i (- (vector-length l) 1))) + (if (< i 0) + #f + (if (== elem (vector-ref l i)) + #t + (loop (- i 1)))))) + ((and (char? elem) (string? l)) + (in? elem (string->list l))) + (else (error 'type-error "type mismatch")))) + ) ; end of begin ) diff --git a/tests/liii/base-test.scm b/tests/liii/base-test.scm index 6e6984d..af9b605 100644 --- a/tests/liii/base-test.scm +++ b/tests/liii/base-test.scm @@ -17,6 +17,8 @@ (import (liii check) (liii base)) +(check-set-mode! 'report-failed) + (check (== (list 1 2) (list 1 2)) => #t) (check (!= (list 1 2) (list 1 2)) => #f) @@ -26,4 +28,11 @@ (display* "hello world" "\n"))) => "hello world\n") +(check (in? 1 (list )) => #f) +(check (in? 1 (list 3 2 1)) => #t) +(check (in? #\x "texmacs") => #t) +(check (in? 1 (vector )) => #f) +(check (in? 1 (vector 3 2 1)) => #t) +(check-catch 'type-error (lambda () (in? 1 "123"))) + (check-report)