KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
How do I do mutually recursive definitions in Clojure? Here is a code in Scala to find prime numbers which uses recursive definitions: val odds: Stream[Int] = cons(3, odds map { _ + 2 }) val primes: Stream[Int] = cons(2, odds filter isPrime) def primeDivisors(n: Int) = primes takeWhile { _ <= Math.ceil(Math.sqrt(n))} filter { n % _ == 0 } def isPrime(n: Int) = primeDivisors(n) isEmpty primes take 10 I translated this to Clojure: (def odds (iterate #(+ % 2) 3)) (def primes (cons 2 (filter is-prime odds))) (defn prime-divisors [n] (filter #(zero? (mod n %)) (take-while #(<= % (Math/ceil (Math/sqrt n))) primes))) (defn is-prime [n] (empty? (prime-divisors n))) (take 10 primes) But writing the definitions in the Clojure REPL one by one gives java.lang.Exception: Unable to resolve symbol: is-prime in this context (NO_SOURCE_FILE:8) after I write (def primes (cons 2 (filter is-prime odds))) . Is there a way to do mutually recursive definitions in Clojure?
Tags (comma-separated)
Save Edits
Cancel