1.13 Verträge
On this page:
1.13.1 define-contract
define-contract
1.13.2 Vertragserklärung
:
number
real
rational
integer
natural
boolean
true
false
string
empty-list
1.13.3 predicate
predicate
1.13.4 one-of
one-of
1.13.5 mixed
mixed
1.13.6 Prozedur-Vertrag
->
1.13.7 property
property
1.13.8 list
list
1.13.9 Vertrags-Variablen
1.13.10 combined
combined
Version: 4.1.5

1.13 Verträge

1.13.1 define-contract

(define-contract id contract)

(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

(: id contract)

Diese Form erklärt contract zum gültigen Vertrag für id.

number

Vertrag für beliebige Zahlen.

real

Vertrag für reelle Zahlen.

rational

Vertrag für rationale Zahlen.

integer

Vertrag für ganze Zahlen.

natural

Vertrag für ganze, nichtnegative Zahlen.

boolean

Vertrag für boolesche Werte.

true

Vertrag für \scheme[#t].

false

Vertrag für \scheme[#f].

string

Vertrag für Zeichenketten.

empty-list

Vertrag für die leere Liste.

1.13.3 predicate

(predicate expr)

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.

1.13.4 one-of

(one-of expr ...)

Dieser Vertrag ist für einen Wert gültig, wenn er gleich dem Wert eines der expr ist.

1.13.5 mixed

(mixed contract ...)

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. }

1.13.7 property

(property expr contract)

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.)

1.13.8 list

(list contract)

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

%a

%b

%c

...

Dies ist eine Vertragsvariable: sie steht für einen Vertrag, der für jeden Wert gültig ist.

1.13.10 combined

(combined contract ...)

Dieser Vertrag ist für einen Wert gültig, wenn er für alle der Verträge contract gültig ist.