(if (test?)
(sequence (display "O.K.")
(ok)
#T)
#F)
(define (vypis s)
(cond ((null? s) (display "[ ]"))
((atom? s) (display s))
(else (display "[ ")
(vypis (car s))
(vypis2 (cdr s))
(display " ]"))))
(define (vypis2 zoz)
(cond ((null? zoz) #T)
((atom? zoz) (display " . ")
(display zoz))
(else (display " ")
(vypis (car s))
(vypis2 (cdr s)))))
(define (ul-in? x ulist)
(member x ulist))
(define (ul-insert x ulist)
(cons x ulist))
(define (ul-intersection ulist1 ulist2)
(cond ((null? ulist1) '())
((in? (car ulist1) ulist2)
(cons (car ulist1) (ul-intersection (cdr ulist1) ulist2)))
(else (ul-intersection (cdr ulist1) ulist2))))
(define (ol-in? x olist)
(member x olist))
(define (ol-insert x olist)
(cond ((null? olist) (list x))
((< x (car olist)) (cons x olist))
((= x (car olist)) olist)
(else (cons (car olist) (ol-insert x (cdr olist))))))
(define (ol-intersection olist1 olist2)
(cond ((or (null? olist1) (null? olist2)) '())
((= (car olist1) (car olist2))
(cons (car olist1) (ol-intersection (cdr olist1) (cdr olist2))))
((< (car olist1) (car olist2)) (ol-intersection (cdr olist1) olist2))
(else (ol-intersection olist1 (cdr olist2)))))
(define (bt-in? x tree)
(cond ((empty? tree) #F)
((= x (value tree)) #T)
((< x (value tree)) (bt-in? x (left tree)))
(else (bt-in? x (right tree)))))
(define (bt-insert x tree)
(cond ((empty? tree) (make-tree x (empty-tree) (empty-tree)))
((= x (value tree)) tree)
((< x (value tree))
(make-tree (value tree) (bt-insert x (left tree)) (right tree)))
(else (make-tree (value tree) (left tree) (insert x (right tree))))))
(define (bt-intersection tree1 tree2)
(define (pom tree1 a)
(cond ((empty? tree1) a)
((in? (value tree1) tree2)
(pom (left tree1) (pom (right tree1)
(bt-insert (value tree1) a))))
(else (pom (left tree1) (pom (right tree1))))))
(pom tree1 (empty-tree)))
(define (generate dictionary)
(define (dispatch msg)
(cond ((eq? msg 'translate) translate)
((eq? msg 'translate<-) translate2)
((eq? msg 'learn) learn)
(else (error "wrong message - dispatch"))))
(define (translate word)
(careful-cdr (assoc-car word dictionary)))
(define (translate2 word)
(careful-car (assoc-cdr word dictionary)))
(define (learn word1 word2)
(generate (cons (cons word1 word2) dictionary)))
dispatch)