Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Clojure中的字符串创建列表_Clojure_Clojure Contrib - Fatal编程技术网

从Clojure中的字符串创建列表

从Clojure中的字符串创建列表,clojure,clojure-contrib,Clojure,Clojure Contrib,我希望创建一个使用字符串作为源的字符列表。我在谷歌上搜索了一下,什么也没找到,所以我写了一个函数,它满足了我的需求: (defn list-from-string [char-string] (loop [source char-string result ()] (def result-char (string/take 1 source)) (cond (empty? source) result :else (recur (string/drop 1

我希望创建一个使用字符串作为源的字符列表。我在谷歌上搜索了一下,什么也没找到,所以我写了一个函数,它满足了我的需求:

(defn list-from-string [char-string]
  (loop [source char-string result ()]
    (def result-char (string/take 1 source))
    (cond
     (empty? source) result
     :else (recur (string/drop 1 source) (conj result result-char)))))
但是看着这些,我觉得我一定错过了一个技巧

  • 是否有一个核心或contrib函数可以为我实现这一点?我肯定是在装傻,对吧
  • 如果没有,是否有办法改进此代码
  • 同样的事情也适用于数字吗

  • 您只需使用seq函数即可:

    user=> (seq "aaa")
    (\a \a \a)
    
    对于数字,您可以使用“哑”解决方案,例如:

    user=> (map (fn [^Character c] (Character/digit c 10)) (str 12345))
    (1 2 3 4 5)
    

    clojure中的p.S.字符串可以“seq”,因此您可以将它们用作任何序列处理函数的源-map,for,…

    如果您知道输入将是字母,只需使用

    user=> (seq "abc")
    (\a \b \c)
    
    对于数字,试试这个

    user=> (map #(Character/getNumericValue %) "123")
    (1 2 3)
    

    编辑:哦,我以为你想要一个不同字符的列表。为此,请使用核心功能“频率”

    例如:

    user=> (frequencies "lazybrownfox")
    {\a 1, \b 1, \f 1, \l 1, \n 1, \o 2, \r 1, \w 1, \x 1, \y 1, \z 1}
    
    然后你所要做的就是拿到钥匙,把它们变成一个字符串(或者不成字符串)


    谢谢我不想得到频率,但我对这个提示很感兴趣。嗨![^c字符]的含义是什么?^Character是否在内部使用字符/数字?这是类型提示,如果没有它,clojure将使用反射来确定参数类型。这使功能稍微快一点。。。
    user=> (frequencies "lazybrownfox")
    {\a 1, \b 1, \f 1, \l 1, \n 1, \o 2, \r 1, \w 1, \x 1, \y 1, \z 1}
    
    user=> (apply str (keys (frequencies "lazybrownfox")))
    "abflnorwxyz"
    
    (apply str (set "lazybrownfox")) => "abflnorwxyz"