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 (>

所以我一直在教自己一些基本的Clojure,但我有点拘泥于下面的内容

我已经设法编写了一些代码来测试输入的数字是否是素数。(尽管它不完全起作用)

(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(