Make Scheme version work.

This commit is contained in:
Peter Kofler 2018-12-03 21:03:48 +01:00
parent c0a6824275
commit 1c530189bd
2 changed files with 35 additions and 32 deletions

View File

@ -1,8 +1,8 @@
;;; Class ITEM ;;; Class ITEM
(define-structure item (define-record-type item (make-item name sell-in quality) item? name sell-in quality)
(name sell-in quality)) ;; define-record-type ... SRFI-9
;; defines make-item, item?, item-name, item-sell-in, item-quality, set-item-name!, set-item-sell-in!, set-item-quality! ;; 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) (define (item-to-string item)
(string-append (item-name item) (string-append (item-name item)
@ -11,36 +11,36 @@
", " ", "
(number->string (item-quality item)))) (number->string (item-quality item))))
;;; Class GILDED-ROSE ;;; GILDED-ROSE
(define (update-quality items) (define (update-quality items)
(for-each (for-each
(lambda (item) (lambda (item)
(if (and (not (string-= (item-name item) "Aged Brie")) (if (and (not (string=? (item-name item) "Aged Brie"))
(not (string-= (item-name item) "Backstage passes to a TAFKAL80ETC concert"))) (not (string=? (item-name item) "Backstage passes to a TAFKAL80ETC concert")))
(if (> (item-quality item) 0) (if (> (item-quality item) 0)
(if (not (string-= (item-name item) "Sulfuras, Hand of Ragnaros")) (if (not (string=? (item-name item) "Sulfuras, Hand of Ragnaros"))
(set-item-quality! item (- (item-quality item) 1)))) (item-quality-set! item (- (item-quality item) 1))))
(cond ((< (item-quality item) 50) (cond ((< (item-quality item) 50)
(set-item-quality! item (+ (item-quality item) 1)) (item-quality-set! item (+ (item-quality item) 1))
(if (string-= (item-name item) "Backstage passes to a TAFKAL80ETC concert") (if (string=? (item-name item) "Backstage passes to a TAFKAL80ETC concert")
(if (< sell-in 11) (if (< (item-sell-in item) 11)
(if (< (item-quality item) 50) (if (< (item-quality item) 50)
(set-item-quality! item (+ (item-quality item) 1)))) (item-quality-set! item (+ (item-quality item) 1))))
(if (< sell-in 6) (if (< (item-sell-in item) 6)
(if (< (item-quality item) 50) (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")) (if (not (string=? (item-name item) "Sulfuras, Hand of Ragnaros"))
(set-item-sell-in! item (- (item-sell-in item) 1))) (item-sell-in-set! item (- (item-sell-in item) 1)))
(if (< (item-sell-in item) 0) (if (< (item-sell-in item) 0)
(if (not (string-= (item-name item) "Aged Brie")) (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) "Backstage passes to a TAFKAL80ETC concert"))
(if (> (item-quality item) 0) (if (> (item-quality item) 0)
(if (not (string-= (item-name item) "Sulfuras, Hand of Ragnaros")) (if (not (string=? (item-name item) "Sulfuras, Hand of Ragnaros"))
(set-item-quality! item (- (item-quality item) 1)))) (item-quality-set! item (- (item-quality item) 1))))
(set-item-quality! item (- (item-quality item) (item-quality item)))) (item-quality-set! item (- (item-quality item) (item-quality item))))
(if (< (item-quality item) 50) (if (< (item-quality item) 50)
(set-item-quality! item (+ (item-quality item) 1)))))) (item-quality-set! item (+ (item-quality item) 1))))))
items)) items))

View File

@ -2,6 +2,7 @@
(display "OMGHAI!") (display "OMGHAI!")
(newline) (newline)
(let ((items (list (make-item "+5 Dexterity Vest" 10 20) (let ((items (list (make-item "+5 Dexterity Vest" 10 20)
(make-item "Aged Brie" 2 0) (make-item "Aged Brie" 2 0)
(make-item "Elixir of the Mongoose" 5 7) (make-item "Elixir of the Mongoose" 5 7)
@ -14,16 +15,18 @@
(make-item "Conjured Mana Cake" 3 6))) (make-item "Conjured Mana Cake" 3 6)))
(days 2)) (days 2))
(define (x day) (define (loop day)
(cond ((<= day days) (cond ((< day days)
(display "-------- day ~a --------~%" i) (display (string-append "-------- day " (number->string day) " --------"))
(newline) (newline)
(display "name, sell-in, quality") (display "name, sell-in, quality")
(newline) (newline)
(for-each (lambda (item) (for-each
(lambda (item)
(display (item-to-string item)) (display (item-to-string item))
(newline)) (newline))
items) items)
(newline)
(update-quality items) (update-quality items)
(x (- day 1))))) (loop (+ day 1)))))
(x 0)) (loop 0))