为什么我的println(例子的最后一行)就像列表理解一样?我想下面的代码来获得Clojure中解决项目欧拉问题#2:为什么列表println的行为不像列表理解?
(def fibsq [0 1])
(defn second-to-last [sq]
(nth sq (- (count sq) 2)))
(second-to-last fibsq)
(defn add-last-two [sq]
(+ (last sq) (second-to-last sq)))
(defn add-to-fibsq [sq]
(if (< (add-last-two sq) 100)
(add-to-fibsq (conj sq (add-last-two sq)))
sq))
;; putting it all together
(add-to-fibsq fibsq)
(println [x (add-to-fibsq fibsq) :when (even? x)])
输出我得到的是以下几点:
(DEF || [0 1] | | [0 1])
(defn倒数第二个[|| [0 1 1 2 3 5 8 13 21 34 55 89] ||](nth || [0 1 1 2 3 5 8 1313 34 55 89] ||( - (count || [0 1 1 2 3 5 8 13 21 34 55 89] ||)2)))
(se cond-to-last || [0 1] ||)|| => 0 ||
(defn add-last-two [|| [0 1 1 2 3 5 8 13 21 34 55 89] ||](+(last || [0 1 1 2 3 5 8 13 21 34 55 89] ||)(倒数第二个|| [0 1 1 2 3 5 8 13 21 34 55 89] ||)))
(defn add-to-fibsq [|| [0 1 1 2 3 5 8 13 21 34 55 89] ||](if(< (add-last-two || [0 1 1 2 3 5 8 13 21 34 55 89] ||)100) (add- to-fibsq(conj || [0 1 1 2 3 5 8 13 21 34 55 89] ||(add-last-two || [0 1 1 2 3 5 8 13 21 34 55 89] ||))) || [0 1 1 2 3 5 8 13 21 34 55 89] ||))
;;把它放在一起(add-to-fibsq || [0 1] ||)|| => [0 1 1 2 3 5 8 13 21 34 55 89] || (println [x(add-to-fibsq || [0 1] ||):when(even?x)])|| => java.lang.RuntimeException:无法在此 上下文中解析符号:x,编译:(NO_SOURCE_PATH:19:2)||
这不是列表解析的工作原理吗?
我没有立即访问Project Euler。你可以编辑你的问题,包括一个你想要解决的问题的简短陈述吗? TNX – octopusgrabbus