Loc*_*rde 5 for-loop substring clojure
我试图在clojure中生成给定字符串的所有可能的前缀子串.例如,如果单词是Ninja,我想要输出("N" "Ni" "Nin" "Ninj" "Ninja")
我可以轻松地做到这一点:
user=> (def a "Ninja")
user => (for [x (range 1 (+ 1 (.length a)))]
(subs a 0 x))
("N" "Ni" "Nin" "Ninj" "Ninja")
Run Code Online (Sandbox Code Playgroud)
这一切都很好......除了..我在那里使用for循环..它看起来并不是非常clojure-y ..有没有更好/正确的方法来做这个没有for循环或是for loop在这种情况下完全可以吗?
谢谢
subs在你的for理解中映射长度或明确映射是我要做的。
但是,如果您真的想要更高级别的功能,则可以使用reductions
(rest (reductions str (str) "Ninja"))
;=> ("N" "Ni" "Nin" "Ninj" "Ninja")
Run Code Online (Sandbox Code Playgroud)
如果您想要后缀,那么您可以很好地使用iterate并且subs因为您不必指定结尾。
(take-while seq (iterate #(subs % 1) "Ninja"))
;=> ("Ninja" "inja" "nja" "ja" "a")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
396 次 |
| 最近记录: |