Scheme

Aus ProgrammingWiki

Wiki-Quelltext dieser Seite.

<language>Scheme</language>
=== Scheme ===
Sagen Sie die jeweilige Antwort des Interpreters vorher. Vergleichen Sie anschließend die Antworten des Scheme-Systems mit Ihren Vorhersagen.
Hinweis: die Zahlen (number) werden nicht nur "nachgeplappert". 

{| cellspacing=10 cellpadding=3
|-
| <eval id="4bc32172e23a3">4</eval> || <eval id="4bc32172e2b77">12345</eval> || <eval id="4bc32172e3347">0.8439</eval>
|-
| <eval id="4bc32172e3b1a">-.590</eval> || <eval id="4bc32172e42eb">-0</eval> || <eval id="4bc32172e4ac0">7/3</eval>
|-
| <eval id="4bc32172e528f">24/3</eval> || <eval id="4bc32172e5a80">9e-8</eval> || <eval id="4bc32172e6253">#b1101</eval>
|}


===Fibonacci-Berechnung 1===

<code id="4bc32172e141a">(define fib
  (lambda (n)
    (if (< n 2)
         1
         (+ (fib (- n 1)) (fib (- n 2))))))</code>
<eval id="4bc32172e6a23">

(fib 5)

</eval>

<check>
(and (= (fib 0) 1)  (= (fib 11) 144) (= (fib 12) 233))
</check>

===Fibonacci-Berechnung 2===

<code id="4bc32172e1bd3" rows="20" cols="90">
(define fib-memo
  (let ((fib-memolist '()))
    (lambda (n)
      (let ((rek-aufrufe 0))
        (letrec
          ((fib-memo-hilf
             (lambda (n)
               (let ((memowert (assoc (list n) fib-memolist)))
                 (if memowert
                     (cdr memowert)
                     (let ((resultat (fib-hilf n)))
                       (set! fib-memolist (cons (cons (list n) resultat) fib-memolist))
                       resultat)))))
           (fib-hilf
             (lambda (n)
               (set! rek-aufrufe (+ rek-aufrufe 1))
               (if (< n 2)
                   1
                   (+ (fib-memo-hilf (- n 1)) (fib-memo-hilf (- n 2)))))))
          (list n (fib-hilf n) rek-aufrufe))))))
</code>

<eval id="4bc32172e71fb" cols="90">(fib-memo 100)</eval>