Skip to content

Instantly share code, notes, and snippets.

@pcalcado
Created April 6, 2011 23:21
Show Gist options
  • Save pcalcado/906744 to your computer and use it in GitHub Desktop.
Save pcalcado/906744 to your computer and use it in GitHub Desktop.
Ableitung der y-Kombinator
;Ableitung der y-Kombinator
(use 'midje.sweet)
(fact "direkte Rekursion"
(defn fakultät [n]
(if (> 2 n)
1
(* n (fakultät (dec n)))))
(fakultät 5) => 120)
(fact "indirekte Rekursion"
(defn fakultät [f n]
(if (> 2 n)
1
(* n (f f (dec n)))))
(fakultät fakultät 5) => 120)
(fact "beseitigung freie Variable"
(defn fakultät [n]
(let [f (fn [f-prime n]
(if (> 2 n)
1
(* n (f-prime f-prime (dec n)))))]
(f f n)))
(fakultät 5) => 120)
; Kombinatorische Logik ist eine Notation, um die Verwendung von
; Variablen in der Mathematischen Logik zu vermeiden. (http://de.wikipedia.org/wiki/Kombinatorische_Logik)
(fact "#1 Ich sehe alles doppelt!"
(defn fakultät [n]
((fn [f-prime n]
(if (> 2 n)
1
(* n (f-prime f-prime (dec n)))))
(fn [f-prime n]
(if (> 2 n)
1
(* n (f-prime f-prime (dec n)))))
n))
(fakultät 5) => 120)
(fact "#2 zurückbringen Rekursion!"
(defn machen-rekursive-funktion [f] (fn [arg] (f f arg)))
(defn fakultät [n]
((machen-rekursive-funktion
(fn [f-prime n]
(if (> 2 n)
1
(* n (f-prime f-prime (dec n)))))) n))
(fakultät 5) => 120)
(fact "#3 gibt es noch einige Doppelarbeit in den Rumpf der Funktion"
(defn machen-rekursive-funktion [f] (fn [arg] (f f arg)))
(defn fakultät [n]
((machen-rekursive-funktion
(fn [f-prime n]
(if (> 2 n)
1
(* n ((machen-rekursive-funktion f-prime) (dec n)))))) n))
(fakultät 5) => 120)
(fact "fakultät tabelle"
(fakultät 2) => 2
(fakultät 3) => 6
(fakultät 4) => 24
(fakultät 5) => 120
(fakultät 6) => 720
(fakultät 7) => 5040
(fakultät 8) => 40320
(fakultät 9) => 362880
(fakultät 10) => 3628800
(fakultät 11) => 39916800
(fakultät 12) => 479001600
(fakultät 13) => 6227020800
(fakultät 14) => 87178291200
(fakultät 15) => 1307674368000
(fakultät 16) => 20922789888000
(fakultät 17) => 355687428096000
(fakultät 18) => 6402373705728000
(fakultät 19) => 121645100408832000
(fakultät 20) => 2432902008176640000
(fakultät 21) => 51090942171709440000
(fakultät 22) => 1124000727777607680000
(fakultät 23) => 25852016738884976640000
(fakultät 24) => 620448401733239439360000
(fakultät 25) => 15511210043330985984000000
(fakultät 26) => 403291461126605635584000000
(fakultät 27) => 10888869450418352160768000000
(fakultät 28) => 304888344611713860501504000000
(fakultät 29) => 8841761993739701954543616000000
(fakultät 30) => 265252859812191058636308480000000)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment