Wieczos Blog

Ich laufe auf Sonnenschein!

Clojure: letfn

by Thomas Wieczorek - Januar 6th, 2012.
Filed under: Clojure, Core.

Da die Doku kein Beispiel für die Verwendung von letfn hat, hier ein kleines Beispiel für eine Fibonacci-Sequenz:

(defn fib-list [z]
  "Returns a list with z Fibonacci numbers"
  ; direkte Funktionsdefinition mit Name & Parameter OHNE fn
  (letfn [(fib [x]
    (if (< x 3)
      1
      (+ (fib (- x 1)) (fib (- x 2)) )
    ))]
  (for [y (range 1 (+ 1 z))] (fib y)))
)

Update: Das ist die lazy-seq Version der Fibonacci-Sequenz.

(defn fib-list [z]
  (take z ((fn fib [x y] (lazy-seq (cons x (fib y (+ x y))))) 1 1)))

Leave a Reply