Table of Contents

u2.lisp

 

u2.lisp

Tipy, návod na řešení u2

TODO: zaadit do idiomů

(defclass time-spec () (
  (min :type (integer 0))
  (sec :type (integer 0 59))
  ))

t-min

getter je obvyklý, vrátí hodnotu slotu

(defmethod   t-min ((self time-spec))
  (slot-value self 'min))

set-min

kontrola: je value nezaporny integer? typespec, todo vyzkouset type-check

(defmethod set-min ((self time-spec) value)
  (unless (typep value '(integer 0)) (error "minuty: cele nezaporne cislo!"))
  (setf (slot-value self 'min) value)
  self) ;settery vracejí self -- volání se dají "řetězit"!!!
 
(defmethod   t-sec ((self time-spec))
  (slot-value self 'sec))

kontrola: je value integer 0-59?

(defmethod set-sec ((self time-spec) value)
  (unless (typep value '(integer 0 59)) (error "sekundy 0-59!"))
  (setf (slot-value self 'sec) value)
   self)
 
(defmethod     time-in-seconds ((self time-spec))
  (+ (* (slot-value self 'min) 60 ) (slot-value self 'sec)))

kontrola: je value integer? modulo funkce floor a multi/values!!!

(defmethod set-time-in-seconds ((self time-spec) value)
  (unless (typep value '(integer 0)) (error "sekundy zaporne!"))
  (multiple-value-bind (min sec) (floor value 60);multiple!!! floor vrací values!!!
  (set-sec (set-min self min) sec)))

helper, vytvoří instanci a nastaví sloty minut a sekund

(defun make-time (min sec)
  (set-sec (set-min (make-instance 'time-spec) min) sec))

dál je to už na jedno brdo, album může u set-tracks použít:

#|
 ...
  (unless (every (lambda (e) (typep e 'track)) value) (error "neni seznam traku!"))
|#
 
#|testiky
(defvar *x*)
(setf *x* (make-instance 'time-spec))
(set-min *x* 3)
(set-sec *x* 30)
(inspect *x*)
(time-in-seconds *x*)
(make-time 5 15)

(inspect *)

|#

zaverecný test:

#|
 (defvar *album*
   (make-album "Miles Davis"
               "Bitches Brew"
               (list (make-track "Pharaoh's Dance" (make-time 20 05))
                     (make-track "Bitches Brew" (make-time 26 58))
                     (make-track "Spanish Key" (make-time 17 32))
                     (make-track "John McLaughlin" (make-time 4 22))
                     (make-track "Miles Runs the Voodoo Down" (make-time 14 01))
                     (make-track "Sanctuary" (make-time 10 56))
                     (make-track "Feio" (make-time 11 49))
                     )
               1969))
(track-count  *album*)
(tracks       *album*)
(album-length *album*)
(print-album  *album*)
 |#
YPP2/u2.lisp.txt · Last modified: 2014/10/22 00:52 (external edit)
CC Attribution-Noncommercial-Share Alike 4.0 International
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0