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
Recursion Clojure复发';她奇怪的行为_Recursion_Clojure_Tail Recursion - Fatal编程技术网

Recursion Clojure复发';她奇怪的行为

Recursion Clojure复发';她奇怪的行为,recursion,clojure,tail-recursion,Recursion,Clojure,Tail Recursion,我用Clojure编写了一个简单的函数,可以解析XML: (defn filter-tags [xml & selectors] (if (and (seq selectors) (seq xml)) (recur (->> xml (filter #(= (first selectors) (:tag %))) (map :content) flatten)

我用Clojure编写了一个简单的函数,可以解析XML:

(defn filter-tags [xml & selectors]
  (if (and (seq selectors) (seq xml))
    (recur         
      (->>      
        xml
        (filter #(= (first selectors) (:tag %)))
        (map :content)
        flatten)
      (rest selectors))
  xml))

(defn search-twitter [query]
  (->
    (clojure.xml/parse (str "http://search.twitter.com/search.atom?q=" query))
    :content
    (filter-tags :entry :title)))

(first (search-twitter "something")))
它与recur配合得很好…但奇怪的是,当我尝试执行“普通”递归时,显式调用过滤器标记,它不起作用。。。
有人能解释一下吗?

您需要使用
apply
(因为参数
选择器使函数可变)使用普通递归调用函数,如下所示:

(defn filter-tags [xml & selectors]
  (if (and (seq selectors) (seq xml))
    (apply filter-tags         
      (->>      
        xml
        (filter #(= (first selectors) (:tag %)))
        (map :content)
        flatten)
      (rest selectors))
  xml))

或者将其设为非变量,那么您的正常递归调用将起作用

定义“不起作用”-没有输出或stacktrace崩溃?我记得很清楚,它返回nil(我使用Clojure 1.2)