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>