Funkcionálne programovanie cvičenie č. 10
Created: 2009-12-09 - 11:26
;pokracovanie v triedeni
;merge sort
; volanie napr.: (sort < '(1 3 5 2 4 8 7 9 0))
(define (sort p? l)
(if (null? l)
null
(dosort p? l (length l))))
;samotny proces sortenia
(define (dosort p? l n)
(cond ((= n 1) (list (car l)))
((= n 2) (let ((x (car l))
(y (cadr l)))
(if (p? x y) (list x y) (list y x))))
(else (let ((i (quotient n 2)))
(merge p?
(dosort p? l i)
(dosort p? (list-tail l i) (- n i)))))))
;proces spajania zoznamov
(define (merge p? x y)
(cond ((null? x) y)
((null? y) x)
((p? (car x) (car y)) (cons (car x) (merge p? (cdr x) y)))
(else (cons (car y) (merge p? x (cdr y))))))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;hra dvoch hracov
; jeden hrac hada farby
; odpovede:
; Perfect - ak 2. hrac uhadne 2 farby... v spravnom poradi
; OneColorAtCorrectPosition
; OneColorOccurs
; Nothing
; checkColor(a b c d) - bude testovat ci dvojica a b a cd su vo vztahu
(define (check-color a b c d)
(cond ((equal (list a b) (list c d)) 'Perfect)
((or (equal a c) (equal b d)) 'OneColorAtCorrectPosition)
((or (equal a d) (equal b c)) 'OneColorOccurs)
(else 'Nothing)))
;za du vyskusat, ale v jazyku (teachpack) master.ss
; vyhodnotit master checkColor