Zap let, letrec, let* from DMdA-beginner language.
This commit is contained in:
parent
050f0a141b
commit
d874065e26
|
@ -2,7 +2,7 @@
|
|||
|
||||
(require syntax/docprovide)
|
||||
(provide #%app #%top (rename-out (DMdA-module-begin #%module-begin)) #%datum #%top-interaction require lib planet
|
||||
define let let* letrec lambda cond if else begin and or
|
||||
define lambda cond if else begin and or
|
||||
define-record-procedures define-record-procedures-parametric
|
||||
.. ... .... ..... ......
|
||||
check-expect check-within check-error check-member-of check-range
|
||||
|
|
|
@ -137,51 +137,6 @@ einer @scheme[#t], ergibt auch der or-Ausdruck @scheme[#t]; wenn alle Operanden
|
|||
ergeben, ergibt auch der @scheme[or]-Ausdruck @scheme[#f].
|
||||
}
|
||||
|
||||
@section{@scheme[let], @scheme[letrec] und @scheme[let*]}
|
||||
|
||||
@defform[(let ((id expr) ...) expr)]{
|
||||
|
||||
Bei einem @scheme[let]-Ausdruck werden zunächst die @scheme[expr]s aus
|
||||
den @scheme[(id expr)]-Paaren ausgewertet. Ihre Werte werden dann im
|
||||
Rumpf-@scheme[expr] für die Namen @scheme[id] eingesetzt. Dabei können
|
||||
sich die Ausdrücke nicht auf die Namen beziehen.
|
||||
|
||||
@schemeblock[
|
||||
(define a 3)
|
||||
(let ((a 16)
|
||||
(b a))
|
||||
(+ b a))
|
||||
=> 19]
|
||||
|
||||
Das Vorkommen von @scheme[a] in der Bindung von @scheme[b] bezieht
|
||||
sich also auf das @scheme[a] aus der Definition, nicht das @scheme[a]
|
||||
aus dem @scheme[let]-Ausdruck.
|
||||
}
|
||||
|
||||
@defform[(letrec ((id expr) ...) expr)]{
|
||||
Ein @scheme[letrec]-Ausdruck ist
|
||||
ähnlich zum entsprechenden @scheme[let]-Ausdruck, mit dem Unterschied, daß sich
|
||||
die @scheme[expr]s aus den Bindungen auf die gebundenen Namen beziehen
|
||||
dürfen.}
|
||||
|
||||
@defform[(let* ((id expr) ...) expr)]{
|
||||
Ein @scheme[let*]-Ausdruck ist ähnlich zum entsprechenden
|
||||
@scheme[let]-Ausdruck, mit dem Unterschied, daß sich die @scheme[expr]s
|
||||
aus den Bindungen auf die Namen beziehen dürfen, die jeweils vor dem
|
||||
@scheme[expr] gebunden wurden. Beispiel:
|
||||
|
||||
@schemeblock[
|
||||
(define a 3)
|
||||
(let* ((a 16)
|
||||
(b a))
|
||||
(+ b a))
|
||||
=> 32]
|
||||
|
||||
Das Vorkommen von @scheme[a] in der Bindung von @scheme[b] bezieht
|
||||
sich also auf das @scheme[a] aus dem @scheme[let*]-Ausdruck, nicht das
|
||||
@scheme[a] aus der globalen Definition.
|
||||
}
|
||||
|
||||
@section{@scheme[begin]}
|
||||
|
||||
@defform[(begin expr expr ...)]{
|
||||
|
|
|
@ -2,7 +2,8 @@
|
|||
@(require scribblings/htdp-langs/common
|
||||
"std-grammar.ss"
|
||||
"prim-ops.ss"
|
||||
(for-label deinprogramm/DMdA-vanilla))
|
||||
(for-label deinprogramm/DMdA-vanilla
|
||||
(only-in deinprogramm/DMdA-beginner define)))
|
||||
|
||||
@title[#:style 'toc #:tag "DMdA-vanilla"]{Die Macht der Abstraktion}
|
||||
|
||||
|
@ -33,3 +34,49 @@ Diese Signatur ist dann für einen Wert gültig, wenn dieser eine Liste ist,
|
|||
für dessen Elemente @scheme[sig] gültig ist.
|
||||
}
|
||||
|
||||
@section{@scheme[let], @scheme[letrec] und @scheme[let*]}
|
||||
|
||||
@defform[(let ((id expr) ...) expr)]{
|
||||
|
||||
Bei einem @scheme[let]-Ausdruck werden zunächst die @scheme[expr]s aus
|
||||
den @scheme[(id expr)]-Paaren ausgewertet. Ihre Werte werden dann im
|
||||
Rumpf-@scheme[expr] für die Namen @scheme[id] eingesetzt. Dabei können
|
||||
sich die Ausdrücke nicht auf die Namen beziehen.
|
||||
|
||||
@schemeblock[
|
||||
(define a 3)
|
||||
(let ((a 16)
|
||||
(b a))
|
||||
(+ b a))
|
||||
=> 19]
|
||||
|
||||
Das Vorkommen von @scheme[a] in der Bindung von @scheme[b] bezieht
|
||||
sich also auf das @scheme[a] aus der Definition, nicht das @scheme[a]
|
||||
aus dem @scheme[let]-Ausdruck.
|
||||
}
|
||||
|
||||
@defform[(letrec ((id expr) ...) expr)]{
|
||||
Ein @scheme[letrec]-Ausdruck ist
|
||||
ähnlich zum entsprechenden @scheme[let]-Ausdruck, mit dem Unterschied, daß sich
|
||||
die @scheme[expr]s aus den Bindungen auf die gebundenen Namen beziehen
|
||||
dürfen.}
|
||||
|
||||
@defform[(let* ((id expr) ...) expr)]{
|
||||
Ein @scheme[let*]-Ausdruck ist ähnlich zum entsprechenden
|
||||
@scheme[let]-Ausdruck, mit dem Unterschied, daß sich die @scheme[expr]s
|
||||
aus den Bindungen auf die Namen beziehen dürfen, die jeweils vor dem
|
||||
@scheme[expr] gebunden wurden. Beispiel:
|
||||
|
||||
@schemeblock[
|
||||
(define a 3)
|
||||
(let* ((a 16)
|
||||
(b a))
|
||||
(+ b a))
|
||||
=> 32]
|
||||
|
||||
Das Vorkommen von @scheme[a] in der Bindung von @scheme[b] bezieht
|
||||
sich also auf das @scheme[a] aus dem @scheme[let*]-Ausdruck, nicht das
|
||||
@scheme[a] aus der globalen Definition.
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user