Skip to content

Instantly share code, notes, and snippets.

@mbertheau
Last active August 29, 2015 14:20
Show Gist options
  • Save mbertheau/56fa018bbb617603557f to your computer and use it in GitHub Desktop.
Save mbertheau/56fa018bbb617603557f to your computer and use it in GitHub Desktop.
Learning Racket - some fizzbuzzing
#lang racket
(define (fizzbuzz)
(for/list ([n (in-range 1 101)])
(let ([fizz (zero? (remainder n 3))]
[buzz (zero? (remainder n 5))])
(cond [(and fizz buzz) "FizzBuzz"]
[fizz "Fizz"]
[buzz "Buzz"]
[else (number->string n)]))))
(define (divisible? n) (lambda (i) (zero? (remainder i n))))
(struct trigger (pred result))
(define (fizzbuzz2* triggers)
(for/list ([n (in-range 1 101)])
(let ([fired-trigger-results
(for/list ([trig triggers]
#:when ((trigger-pred trig) n))
(trigger-result trig))])
(if (null? fired-trigger-results)
(number->string n)
(string-join fired-trigger-results "")))))
(define (fizzbuzz2) (fizzbuzz2* (list (trigger (divisible? 3) "Fizz")
(trigger (divisible? 5) "Buzz"))))
(display (if (equal? (fizzbuzz) (fizzbuzz2))
"Yes!"
"No!"))
(define (go)
(display (string-join (fizzbuzz) "\n")))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment