Code: Alles auswählen
(define-struct point (x y))
(define p (make-point 2 3))
(define (dispatch-point symbol p)
(cond
[(symbol=? symbol 'x) (point-x p)]
[(symbol=? symbol 'y) (point-y p)]
[else void]
))
(dispatch-point 'x p)
-> 2
Code: Alles auswählen
(define-struct point (x y))
(define p (make-point 2 3))
(define (dispatch-point symbol p)
(cond
[(symbol=? symbol 'x) (point-x p)]
[(symbol=? symbol 'y) (point-y p)]
[else void]
))
(dispatch-point 'x p)
-> 2
Du kannst lokale Definitionen in einer Funktion benutzen. Damit sind sie nur in diesem Bereich sichtbar. Ich glaube das ist einigermaßen Kapselung.andre_w hat geschrieben: Eine weitere Frage: in wie fern ist Kapselung in Scheme machbar? Ich kenne das aus den Folien bislang nur nach dem Motto "Bitte die die und die Funktionen nicht benutzen, sondern die abstrahierten Funktionen". Kann man in Scheme irgendwie erreichen, dass Funktionen nur einem bestimmten Bereich gültig sind?
Ja, das entspricht die Definition für Scheme Dispatcher: Dispatchers in Scheme sind Schnittstellenfunktionen, die Symbole auf Funktionen verschiedener Typen abbilden.andre_w hat geschrieben:Ich weiß nicht genau, ob ich den Abschnitt zu Dispatchern in Scheme (T12, Seite 18) ganz richtig verstehe. Ist im folgenden dispatch-point dann ein Dispatcher?
Code: Alles auswählen
(define-struct point (x y)) (define p (make-point 2 3)) (define (dispatch-point symbol p) (cond [(symbol=? symbol 'x) (point-x p)] [(symbol=? symbol 'y) (point-y p)] [else void] )) (dispatch-point 'x p) -> 2
Stimmt, dann könnte man wohl alle Prozeduren in eine große Dispatcher-Prozedur reinpacken und so erreichen, dass diese von außen nur über den Dispatcher aufrufbar ist. Danke!itportal2 hat geschrieben: Du kannst lokale Definitionen in einer Funktion benutzen. Damit sind sie nur in diesem Bereich sichtbar. Ich glaube das ist einigermaßen Kapselung.
Danke, hatte es mir schon so gedacht war mir nur nicht ganz sicheritportal2 hat geschrieben: Ja, das entspricht die Definition für Scheme Dispatcher: Dispatchers in Scheme sind Schnittstellenfunktionen, die Symbole auf Funktionen verschiedener Typen abbilden.