diff --git a/collects/deinprogramm/DMdA-advanced.rkt b/collects/deinprogramm/DMdA-advanced.rkt index 41f968def2..4e0edc038b 100644 --- a/collects/deinprogramm/DMdA-advanced.rkt +++ b/collects/deinprogramm/DMdA-advanced.rkt @@ -11,7 +11,7 @@ .. ... .... ..... ...... check-expect check-within check-error check-member-of check-range check-property for-all ==> expect expect-within expect-member-of expect-range - signature contract : define-contract -> mixed one-of predicate combined + signature contract : define-contract -> mixed one-of predicate combined list-of number real rational integer natural boolean true false string symbol empty-list unspecific property chocolate-cookie) (provide cons) diff --git a/collects/deinprogramm/DMdA-assignments.rkt b/collects/deinprogramm/DMdA-assignments.rkt index c965ee685b..605595e8cc 100644 --- a/collects/deinprogramm/DMdA-assignments.rkt +++ b/collects/deinprogramm/DMdA-assignments.rkt @@ -11,7 +11,7 @@ .. ... .... ..... ...... check-expect check-within check-error check-member-of check-range check-property for-all ==> expect expect-within expect-member-of expect-range - signature contract : define-contract -> mixed one-of predicate combined + signature contract : define-contract -> mixed one-of predicate combined list-of number real rational integer natural boolean true false string empty-list unspecific property chocolate-cookie) (provide cons) diff --git a/collects/deinprogramm/DMdA-vanilla.rkt b/collects/deinprogramm/DMdA-vanilla.rkt index fa8e134fb6..96b60708b6 100644 --- a/collects/deinprogramm/DMdA-vanilla.rkt +++ b/collects/deinprogramm/DMdA-vanilla.rkt @@ -7,7 +7,7 @@ .. ... .... ..... ...... check-expect check-within check-error check-member-of check-range check-property for-all ==> expect expect-within expect-member-of expect-range - signature contract : define-contract -> mixed one-of predicate combined + signature contract : define-contract -> mixed one-of predicate combined list-of number real rational integer natural boolean true false string empty-list property chocolate-cookie) (provide cons) diff --git a/collects/deinprogramm/DMdA.rkt b/collects/deinprogramm/DMdA.rkt index 9b8a41cd3b..3e6b11be31 100644 --- a/collects/deinprogramm/DMdA.rkt +++ b/collects/deinprogramm/DMdA.rkt @@ -31,7 +31,7 @@ (provide (all-from-out test-engine/scheme-tests)) (provide signature define-contract : contract ; legacy - -> mixed one-of predicate combined) + -> mixed one-of predicate combined list-of) (provide number real rational integer natural boolean true false diff --git a/collects/deinprogramm/scribblings/DMdA-beginner.scrbl b/collects/deinprogramm/scribblings/DMdA-beginner.scrbl index c85bc988b7..0230fafc1e 100644 --- a/collects/deinprogramm/scribblings/DMdA-beginner.scrbl +++ b/collects/deinprogramm/scribblings/DMdA-beginner.scrbl @@ -283,12 +283,6 @@ für den Rückgabewert. }} } -@subsection{@scheme[list]} -@defform[(list sig)]{ -Diese Signatur ist dann für einen Wert gültig, wenn dieser eine Liste ist, -für dessen Elemente @scheme[sig] gültig ist. -} - @subsection[#:tag "signature-variable"]{Signatur-Variablen} @defform/none[%a] @defform/none[%b] diff --git a/collects/deinprogramm/scribblings/DMdA-vanilla.scrbl b/collects/deinprogramm/scribblings/DMdA-vanilla.scrbl index 69c44c1912..75cf37cf0d 100644 --- a/collects/deinprogramm/scribblings/DMdA-vanilla.scrbl +++ b/collects/deinprogramm/scribblings/DMdA-vanilla.scrbl @@ -24,3 +24,12 @@ Abstraktion}. @section[#:tag "vanilla-prim-op"]{Primitive Operationen} @prim-op-defns['(lib "DMdA-vanilla.ss" "deinprogramm") #'here '()] + +@section[#:tag "signatures-vanilla"]{Signaturen} + +@subsection{@scheme[list-of]} +@defform[(list-of sig)]{ +Diese Signatur ist dann für einen Wert gültig, wenn dieser eine Liste ist, +für dessen Elemente @scheme[sig] gültig ist. +} + diff --git a/collects/deinprogramm/signature/signature-syntax.rkt b/collects/deinprogramm/signature/signature-syntax.rkt index d5855bdc1c..723847121e 100644 --- a/collects/deinprogramm/signature/signature-syntax.rkt +++ b/collects/deinprogramm/signature/signature-syntax.rkt @@ -4,7 +4,7 @@ signature signature/arbitrary define-contract contract ; legacy define/signature define-values/signature - -> mixed one-of predicate combined property) + -> mixed one-of predicate combined property list-of) (require deinprogramm/signature/signature scheme/promise @@ -59,6 +59,11 @@ (?name name) (?signature-expr (parse-signature #f #'?signature))) #'(make-list-signature '?name ?signature-expr ?stx))) + ((list-of ?signature) + (with-syntax ((?stx (phase-lift stx)) + (?name name) + (?signature-expr (parse-signature #f #'?signature))) + #'(make-list-signature '?name ?signature-expr ?stx))) ((list ?signature1 ?rest ...) (raise-syntax-error #f "list-Vertrag darf nur einen Operanden haben." @@ -269,5 +274,4 @@ (define-syntax predicate within-signature-syntax-transformer) (define-syntax combined within-signature-syntax-transformer) (define-syntax property within-signature-syntax-transformer) -; not a good idea: -; (define-syntax list within-signature-syntax-transformer) +(define-syntax list-of within-signature-syntax-transformer)