爲什麼我的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