Last active
October 19, 2017 08:55
-
-
Save kohyama/5857345 to your computer and use it in GitHub Desktop.
文字列を先頭から見て同じところまで除去 in Clojure
This file contains 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
(require '[clojure.test :refer (with-test are run-tests)]) | |
(with-test | |
(defn str-drop-while-same [& args] | |
(if (some nil? args) args | |
(->> (map #(concat % (repeat nil)) args) | |
(apply map vector) | |
(drop-while #(apply = %)) | |
(take-while #(some identity %)) | |
(apply map str)))) | |
(are [args expected] | |
(= (apply str-drop-while-same args) expected) | |
["abcdef" "abc123"] ["def" "123"] | |
["あいうえお" "あいさんさん" "あいどる"] ["うえお" "さんさん" "どる"] | |
["12345" "67890" "12abc"] ["12345" "67890" "12abc"] | |
["a" "ab" "abc"] ["" "b" "bc"] | |
[nil "a" "ab"] [nil "a" "ab"] | |
["" "a" "ab"] ["" "a" "ab"])) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
えまのんわん さんの
「文字列を先頭から見て同じところまで除去」を Clojure で解く というエントリを読んだので, 自分でもやってみました.
お題はここ から来たようです.
テストは えまのんわん さんのものをそのまま使わせていただいています.
以下解説です.
->>
マクロは, 直前の式の評価結果を, 次の式の最後の要素として挿入します.(->> (a0 a1) (b0 b1) (c0 c1) (d0 d1))
は(d0 d1 (c0 c1 (b0 b1 (a0 a1))))
と同等です.REPL では
*1
で直前の評価結果を参照できるので, 各式の評価過程を例で見ることができます.デフォルトでは無限シーケンスを評価すると, 全て印字しようとして評価から帰って来ないので,
(set! *print-length* 10)
で, シーケンスを印字する際の要素数を 10 に制限しています.