1
我想在clojure中寫一個基於週期的Fizz Buzz。它似乎適用於不是Fizz或Buzz的值,但對於Fizz和Buzz的值則返回nil。clojure週期返回無地圖索引
代碼:
(ns fizz-buzz.core
(:gen-class))
(defn fizz-buzz [value]
(let [fizz (cycle ["" "" "Fizz"])
buzz (cycle ["" "" "" "" "Buzz"])
fb (map str fizz buzz)]
(nth (map-indexed
(fn [i v]
(if (clojure.string/blank? v)
(str (+ i 1)
v)))
fb)
(- value 1)))
測試:
(ns fizz-buzz.core-test
(:require [clojure.test :refer :all]
[fizz-buzz.core :refer :all]))
(deftest value-2-will-return-2
(testing "2 will return the string 2"
(is (= "2" (fizz-buzz 2)))))
(deftest value-4-will-return-4
(testing "4 will return the string 4"
(is (= "4" (fizz-buzz 4)))))
(deftest value-3-will-return-fizz
(testing "3 will return the string Fizz"
(is (= "Fizz" (fizz-buzz 3)))))
(deftest value-5-will-return-buzz
(testing "5 will return the string Buzz"
(is (= "Buzz" (fizz-buzz 5))))
前兩個測試工作(2,4),但嘶嘶聲和音檢測不起作用。我相信我不明白地圖索引的工作方式。
一個編輯器(自動)縮進到Clojure約定真的幫助避免和發現這樣的錯誤。例如,我在'vim-clojure-static'中使用'vi',當原始文件被重新縮進時,'v'放在'(+ i 1)'下面,給出一個清晰的視覺信號,「v」是一個參數'str'而不是'if'。我相信Emacs等,也是類似的。 –
非常感謝Daniel。我不能相信我錯過了這一點。 答:我回到vi後約10年不使用它。我必須查看vim-clojure-static。謝謝你們。 –