31 lines
838 B
Racket
31 lines
838 B
Racket
#lang pl
|
|
|
|
(define-type Token = (U Symbol Integer))
|
|
|
|
(: in? : Symbol (Listof Symbol) -> Boolean)
|
|
(define (in? s l) (and (not (null? l)) (not (and (not (symbol=? s (first l))) (not (in? s (rest l)))))))
|
|
|
|
(test (in? 'a '(b d e a f e)))
|
|
(test (in? 'a '(b x e a x e)))
|
|
(test (in? 'a '(a b d e a f e)))
|
|
(test (in? 'a '(b d e a f e a)))
|
|
(test (not (in? 'a '(b d e f e))))
|
|
(test (not (in? 'a '())))
|
|
|
|
#|
|
|
(: abc : String -> Boolean)
|
|
; Identifies strings that match "(ab(c+))+"
|
|
(define abc (automaton one (four)
|
|
[one : (a -> two)]
|
|
[two : (b -> three)]
|
|
[three : (c -> four)]
|
|
[four : (c -> four) (a -> two)]))
|
|
|
|
(test (abc "abccc"))
|
|
(test (abc "abcccabc"))
|
|
(test (not (abc "ab")))
|
|
(test (not (abc "q")))
|
|
(test (not (abc "abcb")))
|
|
(test (not (abc "abcab")))
|
|
|#
|