Last active
August 29, 2015 14:17
-
-
Save BernardNotarianni/c435b225d7a6861baf0e to your computer and use it in GitHub Desktop.
Tentative de Kata FizzBuzz avec que des monoïdes
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#lang racket | |
(require racket/match) | |
; notre monoid est l'ensemble des entiers | |
; union "fizz" union "buzz" union "fizzbuzz" | |
(define (plus x y) | |
(match (cons x y) | |
[(cons a 0) a] | |
[(cons 0 a) a] | |
[(cons "fizz" "fizz") "fizz"] | |
[(cons _ _) | |
(if (= (+ x y) 3) "fizz" | |
(+ x y))])) | |
(module+ test | |
(require rackunit rackunit/text-ui) | |
(check-equal? (plus 0 0) 0) | |
(check-equal? (plus 0 1) 1) | |
(check-equal? (plus 1 1) 2) | |
(check-equal? (plus 2 1) "fizz") | |
(check-equal? (plus 1 2) "fizz") | |
(check-equal? (plus "fizz" 0) "fizz") | |
(check-equal? (plus 0 "fizz") "fizz") | |
(check-equal? (plus "fizz" "fizz") "fizz") | |
(check-equal? (plus "fizz" 1) 4) | |
"all test run") |
Merci !
Je crois qu'avec l'ensemble de départ qu'on a choisit, l'associativité sera compliqué à avoir.
(check-equal? (plus (plus 8 1) 1) ;; => (plus "fizz" 1) => 4 ?
(plus 8 (plus 1 1))) ;; => (plus 8 2) => "buzz" ?
Passer par des tuples comme '(1 . 1) ou '(2 . 2) ou '(3 . "fizz") permet de simplifier ce pb (je crois que c'est ce que proposait Cyrille).
Proposition (sans implémentation) ici : https://gist.github.com/sroccaserra/704763eff3680a5938d6
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Code en l'état, légèrement nettoyé. Le dernier test ne passe pas (encore).