BuK/IIm10/BuK-Übung02 G2

Aus ProgrammingWiki

Wiki-Quelltext dieser Seite.

<language>Scheme</language>
== 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>

== Aufgabe ==
== 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>