ズンドコキヨシ with Clojure

  • 6
    Like
  • 1
    Comment
More than 1 year has passed since last update.

 概要です。

 実装です。

(require '[clojure.string :as string])

(println
  (str (->> (iterate #(str % (rand-nth ["ズン" "ドコ"])) "")
            (filter #(string/ends-with? % "ズンズンズンズンドコ"))
            first)
       "キ・ヨ・シ!"))

上に出てくる iterate は、遅延シーケンスを返す unfold とも言うべき関数で、次のような動作をします。

(iterate #(str % (rand-nth ["ズン" "ドコ"])) "")

;; => ("" "ズン" "ズンドコ" "ズンドコドコ" "ズンドコドコドコ" "ズンドコドコドコズン" ...

あとは、このシーケンスから最初に条件を満たす値を取り出せば良い、というわけですね。

 同じ調子で、前に流行った「進捗・どう・です・か」も次のように書くことができます。

(let [result (->> (iterate #(str % (rand-nth ["進捗" "どう" "です" "か"])) "")
                  (filter #(string/ends-with? % "進捗どうですか"))
                  first)]
  (println (str result "???"))
  (println (str (count result) "文字で煽られました。")))

便利!₍₍ (ง╹◡╹)ว ⁾⁾