Version: 4.1.5
1.13 Verträge
(define-contract (id p1 ...) contract) |
Die erste Form führt einen neuen Vertrag ein:
sie bindet den Namen id an den Vertrag contract.
Die zweite Form führt einen parametrischen Vertrag (wie
list) ein, der über die Parameter p1
... abstrahiert. Der parametrische Vertrag kann dann als (id a1 ...) verwendet werden, wobei in contract für die
Parameter p1 ... die a1 ... eingesetzt werden.
1.13.2 Vertragserklärung
Diese Form erklärt contract zum gültigen Vertrag für id.
Vertrag für beliebige Zahlen.
Vertrag für reelle Zahlen.
Vertrag für rationale Zahlen.
Vertrag für ganze Zahlen.
Vertrag für ganze, nichtnegative Zahlen.
Vertrag für boolesche Werte.
Vertrag für \scheme[#t].
Vertrag für \scheme[#f].
Vertrag für Zeichenketten.
Vertrag für die leere Liste.
Bei diesem Vertrag muß expr als Wert ein Prädikat haben, also
eine Prozedur, die einen beliebigen Wert akzeptiert und entweder #t
oder #f zurückgibt.
Der Vertrag ist dann für einen Wert gültig, wenn das Prädikat, darauf angewendet,
#t ergibt.
Dieser Vertrag ist für einen Wert gültig, wenn er gleich dem Wert eines
der expr ist.
Dieser Vertrag ist für einen Wert gültig, wenn er für einen der Verträge
contract gültig ist.
1.13.6 Prozedur-Vertrag
(contract ... -> contract) |
Dieser Vertrag ist dann für einen Wert gültig, wenn dieser eine
Prozedur ist. Er erklärt außerdem, daß die Verträge vor dem ->
für die Argumente der Prozedur gelten und der Vertrag nach dem ->
für den Rückgabewert.
}
Dieser Vertrag ist für ein Objekt obj gültig, wenn der
Vertrag contract für (expr obj) gültig ist.
(In der Regel ist expr ein Record-Selektor s. In
dem Fall ist der Vertrag (property s c) für alle Records
gültig, bei denen der Wert des zu s gehörigen Felds den
Vertrag c erfüllt.)
Dieser Vertrag ist dann für einen Wert gültig, wenn dieser eine Liste ist,
für dessen Elemente contract gültig ist.
1.13.9 Vertrags-Variablen
Dies ist eine Vertragsvariable: sie steht für einen Vertrag, der für jeden Wert gültig ist.
Dieser Vertrag ist für einen Wert gültig, wenn er für alle der Verträge
contract gültig ist.