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