BuK/IIm10/BuK-Übung02 G2
Aus ProgrammingWiki
Wiki-Quelltext dieser Seite.
<language>Scheme</language>
= Halteproblem =
== Aufgabe ==
== Lösung ==
<code id="4d8b0c366b24c">
(define haelt-fuer-n?
(lambda (f n)
(if (integer? (f n))
#t
#f)))
(define haelt?
(lambda (f)
(haelt-fuer-n? f 0)))
(define crazy
(lambda (n)
(if (haelt? crazy n)
(crazy n)
n)))
(define haelt-tricky?
(lambda (f timeout)
(letrec
([ft (thread f)]
[helper
(lambda (timeLeft)
(if (thread-running? ft)
(if (= timeLeft 0)
#f
(begin (sleep 1) (helper (- timeLeft 1))))
#t))])
(helper timeout))))
(define test1
(lambda ()
(print "hallo")))
(define test2
(lambda ()
(test2)))
</code>
<run id="4d8b0c366b3cf">
(haelt-tricky? test1 10)
</run>
<run id="4d8b0c366b485">
(haelt-tricky? test2 10)
</run>
= Beweise =
= Kreativität =
Schauen Sie sich das Video http://www.youtube.com/watch?v=oyo_oGUEH-I an, um den Begriff der Kreativität besser zu verstehen.
= Bijektive Funktion =
== Aufgabe ==
Verifizieren Sie, dass die folgende Funktion <math>f : \mathbb{N}^{+} \rightarrow \mathbb{Q}^{+}</math> eine bijektive Funktion ist und
implementieren Sie eine Prozedur, die die zugehörige Umkehrfunktion <math>f^{-1}</math> berechnet.<br>
<math>
f(n)=\begin{cases}
1, &\text{wenn }n = 1;\\
f(\frac{n}{2}) + 1, & \text{wenn n gerade};\\
\frac{1}{f(n - 1)}, & \text{wenn n ungerade}.
\end{cases}
</math>
== Lösung ==
<code id="4d90a7d9e439f">
(define f
(λ (n)
(cond
[(= n 1) 1]
[(= (modulo n 2) 0) (+ (f (/ n 2)) 1)]
[else (/ 1 (f (- n 1)))])))
</code>
<run id="4d90a7d9e4438">
(f 3)
</run>