당신은 단지 atom
당신이 자바 변수를 사용하는 것이 어떤 장소 사용, Clojure의에서 필수적 스타일 코드를 작성하려면 : 여기
n: 0 * result= 1
n: 1 * result= 1
n: 2 * result= 1
n: 3 * * result= 2
n: 4 * * result= 2
n: 5 * * * * result= 4
n: 6 * * result= 2
n: 7 * * * * * * result= 6
n: 8 * * * * result= 4
n: 9 * * * * * * result= 6
n: 10 * * * * result= 4
n: 11 * * * * * * * * * * result= 10
n: 12 * * * * result= 4
n: 13 * * * * * * * * * * * * result= 12
n: 14 * * * * * * result= 6
n: 15 * * * * * * * * result= 8
n: 16 * * * * * * * * result= 8
n: 17 * * * * * * * * * * * * * * * * result= 16
n: 18 * * * * * * result= 6
n: 19 * * * * * * * * * * * * * * * * * * result= 18
n: 20 * * * * * * * * result= 8
n: 21 * * * * * * * * * * * * result= 12
n: 22 * * * * * * * * * * result= 10
n: 23 * * * * * * * * * * * * * * * * * * * * * * result= 22
n: 24 * * * * * * * * result= 8
n: 25 * * * * * * * * * * * * * * * * * * * * result= 20
n: 26 * * * * * * * * * * * * result= 12
n: 27 * * * * * * * * * * * * * * * * * * result= 18
n: 28 * * * * * * * * * * * * result= 12
n: 29 * * * * * * * * * * * * * * * * * * * * * * * * * * * * result= 28
: 결과와
(ns tst.demo.core
(:use demo.core))
(defn gcd [a b]
(if (zero? b)
a
(recur b (mod a b))))
(defn euler-phi [n]
(let [x (atom 0)]
(loop [idx 1]
(when (= 1 (gcd idx n))
(swap! x inc)
(print " * "))
(when (< idx n)
(recur (inc idx))))
@x))
(dotimes [n 30]
(print "n:" n " ")
(let [result (euler-phi n)]
(println " result=" result)))
을 코드의보다 기능적인 버전입니다 :
(ns tst.demo.core
(:use demo.core tupelo.test)
(:require [tupelo.core :as t]))
(t/refer-tupelo)
(defn gcd [a b]
(if (zero? b)
a
(recur b (mod a b))))
(defn euler-phi [n]
(apply +
(t/forv [idx (t/thru 1 n)]
(if (= 1 (gcd idx n))
1
0))))
(dotimes [n 30]
(println "n:" n " result=" (euler-phi n)))
결과 16,
: N = 0의 결과가 다른 것을
n: 0 result= 0
n: 1 result= 1
n: 2 result= 1
n: 3 result= 2
n: 4 result= 2
n: 5 result= 4
n: 6 result= 2
n: 7 result= 6
n: 8 result= 4
n: 9 result= 6
n: 10 result= 4
n: 11 result= 10
n: 12 result= 4
n: 13 result= 12
n: 14 result= 6
n: 15 result= 8
n: 16 result= 8
n: 17 result= 16
n: 18 result= 6
n: 19 result= 18
n: 20 result= 8
n: 21 result= 12
n: 22 result= 10
n: 23 result= 22
n: 24 result= 8
n: 25 result= 20
n: 26 result= 12
n: 27 result= 18
n: 28 result= 12
n: 29 result= 28
주 ..... 나는 그것을 디버깅하려고하지 않았다.
오류 메시지가 정확합니다 :'x'가 원자 또는 다른 참조 유형이 아니라면'set! '할 수 없습니다. –