Skip to content

Instantly share code, notes, and snippets.

@karad
Last active July 15, 2016 00:53
Show Gist options
  • Save karad/240103f4adc9b0037a47235bb85f7678 to your computer and use it in GitHub Desktop.
Save karad/240103f4adc9b0037a47235bb85f7678 to your computer and use it in GitHub Desktop.
RingとかのMiddlewareのしくみ解説にFizzBuzzを使ってみるサンプル
;;; fizzbuzzで渡される一つ一つの数値はひとつのリクエストとみなすことができる
(defn wrap-request
[x]
{:request x
:result x})
(defn wrap-result
[map]
(:result map))
(defn wrap-fizz
[map]
(let [x (:request map)]
(if (= (mod x 3) 0)
(assoc map :result "fizz")
map)))
(defn wrap-buzz
[map]
(let [x (:request map)]
(if (= (mod x 5) 0)
(assoc map :result "buzz")
map)))
(defn wrap-fizzbuzz
[map]
(let [x (:request map)]
(if (and (= (mod x 3) 0) (= (mod x 5) 0))
(assoc map :result "fizzbuzz")
map)))
(defn fizzbuzz-server
"fizz buzz サーバー本体"
[vec]
(map (fn [in] (-> in
wrap-request
wrap-fizz
wrap-buzz
wrap-fizzbuzz
wrap-result)) vec))
;; -> (fizzbuzz-server (range 1 20))
;; (1 2 "fizz" 4 "buzz" "fizz" 7 8 "fizz" "buzz" 11 "fizz" 13 14 "fizzbuzz" 16 17 "fizz" 19)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment