Programmierparadigmen - Scheme: Arten von Gleichheit

Werbung
Funktionales Programmieren: Scheme
Funktionales Programmieren: Scheme
Gliederung
Programmierparadigmen
Scheme: Arten von Gleichheit
1
D. Rösner
Institut für Wissens- und Sprachverarbeitung
Fakultät für Informatik
Otto-von-Guericke Universität Magdeburg
Funktionales Programmieren: Scheme
Arten von Gleichheit
Auswirkungen
c
Sommer 2013, 24. Juni 2013, 2011
- 13 D.Rösner
D. Rösner PGP 2013 . . .
Funktionales Programmieren: Scheme
D. Rösner PGP 2013 . . .
1
Arten von Gleichheit
Auswirkungen
Funktionales Programmieren: Scheme
Arten von Gleichheit
2
Arten von Gleichheit
Auswirkungen
Arten von Gleichheit
Scheme unterscheidet verschiedene Arten von Gleichheit
der wichtigste Unterschied:
Illustration durch ein Beispiel:
Identität (Prädikat eq?) vs.
Strukturgleichheit (Prädikat equal?)
(define tl1 ’(1 2 3))
aus Identität (oder eq?-ness) folgt stets Strukturgleichheit
(oder equal?-ity),
(define tl2 (cons (car tl1) (cdr tl1)))
aber nicht umgekehrt
Frage: Was würde in Haskell in vergleichbarer Situation
gelten?
siehe u.a. [AGJ96]
D. Rösner PGP 2013 . . .
4
D. Rösner PGP 2013 . . .
5
Funktionales Programmieren: Scheme
Arten von Gleichheit
Auswirkungen
Funktionales Programmieren: Scheme
Arten von Gleichheit
Arten von Gleichheit
Auswirkungen
Arten von Gleichheit
Illustration durch ein Beispiel:
Illustration durch ein Beispiel:
> (equal? tl1 tl2)
#t
> (eq? (cdr tl1)(cdr tl2))
#t
> (eq? tl1 tl2)
#f
andererseits: (cdr tl1) und (cdr tl2) sind identisch
(und damit auch strukturgleich)
m.a.W.: die Listen tl1 und tl2 teilen sich einen
identischen Rest (engl. structure sharing)
die Listen tl1 und tl2 sind strukturgleich (equal?), aber
nicht identisch (eq?)
D. Rösner PGP 2013 . . .
Funktionales Programmieren: Scheme
D. Rösner PGP 2013 . . .
6
Arten von Gleichheit
Auswirkungen
Funktionales Programmieren: Scheme
Arten von Gleichheit
7
Arten von Gleichheit
Auswirkungen
Arten von Gleichheit
Illustration durch ein Beispiel:
Illustration durch ein Beispiel:
damit: destruktive Mutatoren wirken sich auf der geteilten
Struktur aus
bei einer nicht geteilten Struktur wirken sich destruktive
Mutatoren nur dort aus, wo sie angewendet werden
> (set-car! (cdr tl1) 4)
> (set-car! tl2 7)
> tl1
(1 4 3)
> tl2
(7 4 3)
> tl2
(1 4 3)
> tl1
(1 4 3)
D. Rösner PGP 2013 . . .
8
D. Rösner PGP 2013 . . .
9
Funktionales Programmieren: Scheme
Arten von Gleichheit
Auswirkungen
Funktionales Programmieren: Scheme
Arten von Gleichheit
Arten von Gleichheit
Auswirkungen
Literatur: I
der Unterschied zwischen Identität (oder eq?-ness) und
Strukturgleichheit (oder equal?-ity) ist in vielen
Scheme-Funktionen relevant
Beispiele:
Harold Abelson, G.J.Sussman, and J.Sussman.
Structure and Interpretation of Computer Programs.
MIT Press, Cambridge, MA, USA, 1996.
2nd edition; Bem.: dt. Übersetzung existiert, aber engl.
Original ist mehr zu empfehlen – DR.
Entfernen: remove vs. remq
Test auf Enthaltensein: member vs. memq
Suche in Assoziationslisten: assoc vs. assq
...
D. Rösner PGP 2013 . . .
11
D. Rösner PGP 2013 . . .
12
Herunterladen