Clojure布尔值是真还是假
所以我一直在教自己一些基本的Clojure,但我有点拘泥于下面的内容 我已经设法编写了一些代码来测试输入的数字是否是素数。(尽管它不完全起作用)Clojure布尔值是真还是假,clojure,Clojure,所以我一直在教自己一些基本的Clojure,但我有点拘泥于下面的内容 我已经设法编写了一些代码来测试输入的数字是否是素数。(尽管它不完全起作用) (defn是素数[x] (循环[n2] (续) ( (def充注(cons 2)过滤器(fn[n] (让[sqn(数学/sqrt n)] (没有任何?#(零?(rem n%)) )你可以经常使用和和或来去除显式的假和真。像这样去除了println后,这给了我们 (defn is-prime [x] (loop [n 2] (or (>
(defn是素数[x]
(循环[n2]
(续)
(
按预期返回true。然而,我现在的目标是让它在屏幕上返回真或假,而不是用我的打印行。我需要布尔值为true或false,而不需要添加文本 我不知道您为什么不简单地将
(println“true”)
更改为true
。这很好:
(defn is-prime [x]
(loop [n 2]
(cond
(< n x) (if (not= 0 (mod x n))
(recur (inc n))
false)
:else true)))
(is-prime 5) ;; true
(filter is-prime (range 2 15)) ;; (2 3 5 7 11 13)
以下是另一种稍微“克隆法”的方法:
(defn is-prime [x]
(cond
(<= x 1) false
(= x 2) true
:else (every? #(pos? (mod x %)) (range 2 (inc (Math/sqrt x))))))
我不知道您为什么不简单地将
(println“true”)
更改为true
。这很好:
(defn is-prime [x]
(loop [n 2]
(cond
(< n x) (if (not= 0 (mod x n))
(recur (inc n))
false)
:else true)))
(is-prime 5) ;; true
(filter is-prime (range 2 15)) ;; (2 3 5 7 11 13)
以下是另一种稍微“克隆法”的方法:
(defn is-prime [x]
(cond
(<= x 1) false
(= x 2) true
:else (every? #(pos? (mod x %)) (range 2 (inc (Math/sqrt x))))))
只是为了好玩/与问题无关 要了解clojure的力量,下面是一个用懒惰的primes seq generation进行的伸展思维练习:
user>
(def primes (cons 2 (filter (fn [n]
(let [sqn (Math/sqrt n)]
(not-any? #(zero? (rem n %))
(take-while #(<= % sqn) primes))))
(iterate #(+ 2 %) 3))))
#'user/primes
user> (last (take 10000 primes))
104729
user> (take 20 primes)
(2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71)
user> (last (take 10000 primes))
104729
user> (last (take 100000 primes))
1299709
user>
(def充注(cons 2)过滤器(fn[n]
(让[sqn(数学/sqrt n)]
(没有任何?#(零?(rem n%))
(花点时间#)(只是为了好玩/与问题无关
要了解clojure的力量,下面是一个用懒惰的primes seq generation进行的伸展思维练习:
user>
(def primes (cons 2 (filter (fn [n]
(let [sqn (Math/sqrt n)]
(not-any? #(zero? (rem n %))
(take-while #(<= % sqn) primes))))
(iterate #(+ 2 %) 3))))
#'user/primes
user> (last (take 10000 primes))
104729
user> (take 20 primes)
(2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71)
user> (last (take 10000 primes))
104729
user> (last (take 100000 primes))
1299709
user>
(def充注(cons 2)过滤器(fn[n]
(让[sqn(数学/sqrt n)]
(没有任何?#(零?(rem n%))
)你可以经常使用和和或来去除显式的假和真。像这样去除了println
后,这给了我们
(defn is-prime [x]
(loop [n 2]
(or (>= n x)
(and (not= 0 (mod x n))
(recur (inc n))))))
对我来说,这更清楚
顺便说一句,Clojure谓词按照惯例以?
结尾:是prime?
而不是是prime
你可以经常使用和和或来摆脱显式的假和真
(defn is-prime [x]
(loop [n 2]
(or (>= n x)
(and (not= 0 (mod x n))
(recur (inc n))))))
对我来说,这更清楚
顺便说一下,Clojure谓词按照惯例以?
结尾:是prime?
而不是是prime
嗨,不,这是我尝试的第一件事。你失去了我的第二部分。对不起。嗨,不,这是我尝试的第一件事。你失去了我的第二部分。对不起,我正在REPL.it中运行它,这是pl我被告知在atform上运行它。使用上面的工作方式,我在转换它时一定错过了括号或其他内容。非常感谢Shlomi。Shlomi,is prime前面的过滤器,是否可以允许根据输入确定范围?例如,将其更改为(prime filter 2 15)“?@JamesBurton,当然是。你可以从键盘上读取一个数字,也可以将它作为参数传递给另一个函数。我添加了下面的命令来读取is prime函数。但是它读取的是真、假等,而不是数字。我如何获得这两个范围之间的所有prime?(defn是prime[x](循环[n2](cond(