只是尝试编写一个递归的可变参数函数,它打印列表的元素,每个调用一个。第一次尝试:
(defn f1 [head & tail]
(when-not (nil? head)
(println head )
(f1 tail) ;; how to unbox/destructure tail ????
) ;; when
) ;; defn
(f1 "one" "two" "three" "four")
但是得到: - (
one
(two three four)
然后,在一个非常优雅的#34;方式:
(defn f2Aux [all]
(when-not (empty? all)
(println (first all) )
(f2Aux (rest all))
)
) ; defn
(defn f2 [head & tail]
(f2Aux (list* head tail))
) ;; defn
(f2 "one" "two" "three" "four")
非常确定有更好的方法。
由于
修改即可。仍在寻找不同的东西:
(defn f3
;; if we get a list
([all]
(when-not (empty? all)
(println (first all) )
(f3 (rest all))
) ; when
)
;; if we get several args
([head & tail]
(f3 (list* head tail)) ;; pack the args and call us again
)
) ;; defn
答案 0 :(得分:1)
由于tail
被解构为一个序列,并且您的函数是可变参数,因此您需要apply
tail
到您的函数,以便它在{{1}中的每个项目中接收一个参数}:
tail