Grundlagen der funktionsorientierten Programmierung mit SCHEME/Echte und endständige Rekursionen JS

Aus ProgrammingWiki

Wiki-Quelltext dieser Seite.

<language>SchemeJS</language>
<table><tr><td valign="top">
<table border="0" cellspacing="0" cellpadding="0">
<tr><td>'''Beispiel:'''</td></tr>
<tr>
<td width="500" height="180" valign="top">
<code id="5ba47d7a35c07">
(define fak-rek
  (lambda (n)
    (print "fak-rek " n)
    (if (= n 0)
        1
        (* n (fak-rek (- n 1))))))
</code>
</td>
</tr>
<tr><td>'''Trace-Modus:'''</td></tr>
<tr>
<td width="500" height="100" valign="top">
<run id="5ba47d7a35d3c">
(fak-rek 5)
</run>
</td>
</tr>
</table>
</td><td valign="top">
<table border="0" cellspacing="0" cellpadding="0">
<tr><td>'''Beispiel:'''</td></tr>
<tr>
<td width="500" height="180" valign="top">
<code id="5ba47d7a35c75" >
(define fak-help
  (lambda (n fak)
    (print "fak-help " n " " fak)
    (if (= n 0)
        fak
        (fak-help (- n 1) (* n fak)))))

(define fak-it
  (lambda (n)
    (print "fak-it " n)
    (fak-help n 1)))
</code>
</td>
</tr>
<tr><td>'''Trace-Modus:'''</td></tr>
<tr>
<td width="500" height="100" valign="top">
<run id="4c9e0cd390ebb">
(fak-it 5)
</run>
</td>
</tr>
</table>

</td></tr></table>


<table><tr><td valign="top">
<table border="0" cellspacing="0" cellpadding="0">
<tr><td>'''Beispiel:'''</td></tr>
<tr>
<td width="500" height="180" valign="top">
<code id="5ba4893c2640d">
(define indent 0)
(define fak-rek
  (lambda (n)
    (set! indent (+ indent 1))
    (print (make-string indent #\space) "fak-rek " n)
    (let ([r
      (if (= n 0)
         1
          (* n (fak-rek (- n 1)))
      )])
      (print (make-string indent #\space) r)
      (set! indent (- indent 1))
      r
    )
  )
)
</code>
</td>
</tr>
<tr><td>'''Trace-Modus:'''</td></tr>
<tr>
<td width="500" height="100" valign="top">
<run id="5ba4893c26585">
(fak-rek 5)
</run>
</td>
</tr>
</table>
</td><td valign="top">
<table border="0" cellspacing="0" cellpadding="0">
<tr><td>'''Beispiel:'''</td></tr>
<tr>
<td width="500" height="180" valign="top">
<code id="5ba4893c264f5" >
(define indent 0)
(define fak-help
  (lambda (n fak)
    (set! indent (+ indent 1))
    (print (make-string indent #\space) "fak-help " n " " fak)
    (let ([r
      (if (= n 0)
        fak
        (fak-help (- n 1) (* n fak)))
      ])
      (print (make-string indent #\space) r)
      (set! indent (- indent 1))
      r
    )
  )
)

(define fak-it
  (lambda (n)
    (set! indent (+ indent 1))
    (print (make-string indent #\space) "fak-it " n)
    (let ([r (fak-help n 1)])
      (print (make-string indent #\space) r)
      (set! indent (- indent 1))
      r
    )
  )
)
</code>
</td>
</tr>
<tr><td>'''Trace-Modus:'''</td></tr>
<tr>
<td width="500" height="100" valign="top">
<run id="5ba4893c265f4">
(fak-it 5)
</run>
</td>
</tr>
</table>

</td></tr></table>