【发布时间】:2014-10-08 15:50:40
【问题描述】:
前言 首先,我是 Clojure 和编程的新手,所以我想我会尝试创建一个函数,使用我的自然直觉来求解一个非平凡的方程。结果是希望找到平方根。
问题 阻止我的 square-n-map-maker 函数迭代超过某个点的最有效方法是什么?我想修复 square-n-map-maker 以便我可以注释掉 square-maker 函数,该函数为我提供了我当前想要查看的结果和格式,但无法回忆平方根答案(到目前为止据我所知)。
即我希望它在大于或等于我的输入值时停止
我最初的想法是,我希望它不是一个关键字列表,而是一个地图。但是我很难让我的功能给我一张地图。我想要一张地图的全部原因,其中一对中的一个成员是 n,另一个是 n^2,以便我可以从中提取实际的平方根并将其作为答案返回给用户。
关于实现此目的的最佳方法有什么想法吗? (下面是我要修复的功能)
;; attempting to make a map so that I can comb over the
;; map later and recall a value that meets
;; my criteria to terminate and return result if (<= temp-var input)
(defn square-n-map-maker [input] (for [temp-var {remainder-culler input}]
(map list(temp-var) (* temp-var temp-var))
)
)
(square-n-map-maker 100) => clojure.lang.ArityException: Wrong number of args (0) passed to: MapEntry
AFn.java:437 clojure.lang.AFn.throwArity
AFn.java:35 clojure.lang.AFn.invoke
/Users/dbennett/Dropbox/Clojure Files/SquareRoot.clj:40 sqrt-range-high-end/square-n-map-maker[fn]
以下是我的其余代码
;; My idea on the best way to find a square root is simple.
;; If I want to find the square root of n, divide n in half
;; Then find all numbers in 0...n that return only a remainder of 0.
;; Then find the number that can divide by itself with a result of 1.
;; First I'll develop a function that works with evens and then odds
(defn sqrt-range-high-end [input] (/ input 2))
(sqrt-range-high-end 100) => 50
(defn make-sqrt-range [input] (range (sqrt-range-high-end (+ 1 input))))
(make-sqrt-range 100) =>(0 1 2 3 4 5 6 ... 50)
(defn zero-culler [input] (remove zero? (make-sqrt-range input)))
(zero-culler 100) =>(1 2 3 4 5 6 ... 50)
(defn odd-culler [input] (remove odd? (zero-culler input)))
(odd-culler 100) => (2 4 6 8 10...50)
(defn even-culler [input] (remove even? (zero-culler input)))
(even-culler 100) => (1 3 5 7...49)
(defn remainder-culler [input] (filter #(zero? (rem input %)) (odd-culler input)))
(remainder-culler 100) => (2 4 6 12 18)
(defn square-maker [input] (for [temp-var (remainder-culler input)]
(list (keyword (str
temp-var" "
(* temp-var temp-var)
)
)
)
)
(square-maker 100) => ((:2 4) (:4 16) (:10 100) (:20 400) (:50 2500))
【问题讨论】:
标签: loops for-loop clojure square-root