我正在解决一个4Clojure练习,这个练习要求你建立自己的插入功能.我的答案如下:
(fn my-interpose
([separator input] (my-interpose separator input nil))
([separator input result]
(if
(empty? input)
(reverse (rest result))
(my-interpose separator (rest input) (cons separator (cons (first input) result))))))
Run Code Online (Sandbox Code Playgroud)
在读Clojure书时,我正在做这些练习来学习语言.我想知道有关我的语言经验的人的代码的意见.我可以避免反向通话吗?是否有任何惯例我很难用这种代码打破?
你有什么是一个很好的起点:).优秀作品.
从您拥有的东西开始,您可能希望:
用调用替换你的递归调用,recur因为写入它会遇到堆栈溢出
(defn foo [stuff]
(dostuff ... )
(foo (rest stuff)))
Run Code Online (Sandbox Code Playgroud)
变为:
(defn foo [stuff]
(dostuff ...)
(recur (rest stuff)))
Run Code Online (Sandbox Code Playgroud)
避免吹栈.然后经常变成:
(map dostuff stuff)
完全用for函数替换recustion
(for [a one-list b another-list]
(dont-give-away-the-answer))
Run Code Online (Sandbox Code Playgroud)