diff --git a/collects/deinprogramm/DMdA-beginner.rkt b/collects/deinprogramm/DMdA-beginner.rkt index 8d6d9bdcf3..dd312a9809 100644 --- a/collects/deinprogramm/DMdA-beginner.rkt +++ b/collects/deinprogramm/DMdA-beginner.rkt @@ -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 diff --git a/collects/deinprogramm/scribblings/DMdA-beginner.scrbl b/collects/deinprogramm/scribblings/DMdA-beginner.scrbl index 0230fafc1e..b878253270 100644 --- a/collects/deinprogramm/scribblings/DMdA-beginner.scrbl +++ b/collects/deinprogramm/scribblings/DMdA-beginner.scrbl @@ -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 ...)]{ diff --git a/collects/deinprogramm/scribblings/DMdA-vanilla.scrbl b/collects/deinprogramm/scribblings/DMdA-vanilla.scrbl index 75cf37cf0d..794debeec3 100644 --- a/collects/deinprogramm/scribblings/DMdA-vanilla.scrbl +++ b/collects/deinprogramm/scribblings/DMdA-vanilla.scrbl @@ -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. +} + +