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