diff --git a/scheme/gilded-rose.scm b/scheme/gilded-rose.scm index 28dc326d..8a72f50e 100644 --- a/scheme/gilded-rose.scm +++ b/scheme/gilded-rose.scm @@ -1,8 +1,8 @@ ;;; Class ITEM -(define-structure item - (name sell-in quality)) -;; defines make-item, item?, item-name, item-sell-in, item-quality, set-item-name!, set-item-sell-in!, set-item-quality! +(define-record-type item (make-item name sell-in quality) item? name sell-in quality) +;; define-record-type ... SRFI-9 +;; creates make-item, item?, item-name, item-sell-in, item-quality, item-name-set!, item-sell-in-set!, item-quality-set! (define (item-to-string item) (string-append (item-name item) @@ -11,36 +11,36 @@ ", " (number->string (item-quality item)))) -;;; Class GILDED-ROSE +;;; GILDED-ROSE (define (update-quality items) (for-each (lambda (item) - (if (and (not (string-= (item-name item) "Aged Brie")) - (not (string-= (item-name item) "Backstage passes to a TAFKAL80ETC concert"))) + (if (and (not (string=? (item-name item) "Aged Brie")) + (not (string=? (item-name item) "Backstage passes to a TAFKAL80ETC concert"))) (if (> (item-quality item) 0) - (if (not (string-= (item-name item) "Sulfuras, Hand of Ragnaros")) - (set-item-quality! item (- (item-quality item) 1)))) + (if (not (string=? (item-name item) "Sulfuras, Hand of Ragnaros")) + (item-quality-set! item (- (item-quality item) 1)))) (cond ((< (item-quality item) 50) - (set-item-quality! item (+ (item-quality item) 1)) - (if (string-= (item-name item) "Backstage passes to a TAFKAL80ETC concert") - (if (< sell-in 11) + (item-quality-set! item (+ (item-quality item) 1)) + (if (string=? (item-name item) "Backstage passes to a TAFKAL80ETC concert") + (if (< (item-sell-in item) 11) (if (< (item-quality item) 50) - (set-item-quality! item (+ (item-quality item) 1)))) - (if (< sell-in 6) + (item-quality-set! item (+ (item-quality item) 1)))) + (if (< (item-sell-in item) 6) (if (< (item-quality item) 50) - (set-item-quality! item (+ (item-quality item) 1)))))))) + (item-quality-set! item (+ (item-quality item) 1)))))))) - (if (not (string-= (item-name item) "Sulfuras, Hand of Ragnaros")) - (set-item-sell-in! item (- (item-sell-in item) 1))) + (if (not (string=? (item-name item) "Sulfuras, Hand of Ragnaros")) + (item-sell-in-set! item (- (item-sell-in item) 1))) (if (< (item-sell-in item) 0) - (if (not (string-= (item-name item) "Aged Brie")) - (if (not (string-= (item-name item) "Backstage passes to a TAFKAL80ETC concert")) + (if (not (string=? (item-name item) "Aged Brie")) + (if (not (string=? (item-name item) "Backstage passes to a TAFKAL80ETC concert")) (if (> (item-quality item) 0) - (if (not (string-= (item-name item) "Sulfuras, Hand of Ragnaros")) - (set-item-quality! item (- (item-quality item) 1)))) - (set-item-quality! item (- (item-quality item) (item-quality item)))) + (if (not (string=? (item-name item) "Sulfuras, Hand of Ragnaros")) + (item-quality-set! item (- (item-quality item) 1)))) + (item-quality-set! item (- (item-quality item) (item-quality item)))) (if (< (item-quality item) 50) - (set-item-quality! item (+ (item-quality item) 1)))))) - items)) + (item-quality-set! item (+ (item-quality item) 1)))))) + items)) diff --git a/scheme/texttest-feature.scm b/scheme/texttest-feature.scm index 8b9b4740..ee15981e 100644 --- a/scheme/texttest-feature.scm +++ b/scheme/texttest-feature.scm @@ -2,6 +2,7 @@ (display "OMGHAI!") (newline) + (let ((items (list (make-item "+5 Dexterity Vest" 10 20) (make-item "Aged Brie" 2 0) (make-item "Elixir of the Mongoose" 5 7) @@ -14,16 +15,18 @@ (make-item "Conjured Mana Cake" 3 6))) (days 2)) - (define (x day) - (cond ((<= day days) - (display "-------- day ~a --------~%" i) + (define (loop day) + (cond ((< day days) + (display (string-append "-------- day " (number->string day) " --------")) (newline) (display "name, sell-in, quality") (newline) - (for-each (lambda (item) - (display (item-to-string item)) - (newline)) - items) + (for-each + (lambda (item) + (display (item-to-string item)) + (newline)) + items) + (newline) (update-quality items) - (x (- day 1))))) - (x 0)) + (loop (+ day 1))))) + (loop 0))