Skip to content

Instantly share code, notes, and snippets.

@lagenorhynque
Last active March 5, 2018 05:11
Show Gist options
  • Select an option

  • Save lagenorhynque/95cf83537b41425188e9b7ff8a7d42ce to your computer and use it in GitHub Desktop.

Select an option

Save lagenorhynque/95cf83537b41425188e9b7ff8a7d42ce to your computer and use it in GitHub Desktop.
sicp.chapter1.2-2> (defn my-odd? [n]
(letfn [(odd? [n]
(if (zero? n)
false
(even? (dec n))))
(even? [n]
(if (zero? n)
true
(odd? (dec n))))]
(odd? n)))
#'sicp.chapter1.2-2/my-odd?
sicp.chapter1.2-2> (map my-odd? (range (inc 5)))
(false true false true false true)
sicp.chapter1.2-2> (my-odd? 100)
false
sicp.chapter1.2-2> (my-odd? 1000)
false
sicp.chapter1.2-2> (my-odd? 10000)
StackOverflowError clojure.lang.Numbers$LongOps.dec (Numbers.java:562)
sicp.chapter1.2-2> (defn my-odd? [n]
(letfn [(odd? [n]
(if (zero? n)
false
#(even? (dec n))))
(even? [n]
(if (zero? n)
true
#(odd? (dec n))))]
(trampoline odd? n)))
#'sicp.chapter1.2-2/my-odd?
sicp.chapter1.2-2> (my-odd? 10000)
false
sicp.chapter1.2-2> (my-odd? 100000)
false
CL-USER> (defun my-oddp (n)
(labels ((odd? (n)
(if (zerop n)
nil
(even? (1- n))))
(even? (n)
(if (zerop n)
t
(odd? (1- n)))))
(odd? n)))
MY-ODDP
CL-USER> (mapcar #'my-oddp '(0 1 2 3 4 5))
(NIL T NIL T NIL T)
CL-USER> (my-oddp 100000)
NIL
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment