Grundlagen der funktionsorientierten Programmierung mit SCHEME/Vergleichsoperatoren

Aus ProgrammingWiki

Wiki-Quelltext dieser Seite.

<language>Scheme</language>
Um strukturierte numerische bzw. nichtnumerische Daten vergleichen zu können, bietet Scheme Vergleichsoperatoren (Prädikate) mit verschiedenen Wichtungen an:

 equal? / eqv? / eq?

== Gleich, gleicher, am gleichesten ==

Mit den folgenden Prozeduren testen wir diese Vergleichsoperatoren:

<code id="4cb16c64ea63c">
(define vergleich
  (lambda (ls)
    (display "Nr.") (display #\tab)
    (display "equal?") (display #\tab) 
    (display "eqv?") (display #\tab) 
    (display "eq?") (newline)
    (tabausgabe ls 1)))

(define tabausgabe
  (lambda (ls n)
    (if (null? ls)
        'ok
        (begin
          (display n)
          (display #\tab) 
          (display (equal? (eval (caar ls)) (eval (cdar ls))))
          (display #\tab) 
          (display (eqv? (eval (caar ls)) (eval (cdar ls))))
          (display #\tab) 
          (display (eq? (eval (caar ls)) (eval (cdar ls))))
          (newline)
          (tabausgabe (cdr ls) (+ n 1))))))
</code>

<run id="4cb16c64ea764">
(vergleich '((3 . 3) 
             (4.0 . 4)
             ((* 3 3) . 9)           
             (3/2 . (+ 1 1/2))
             (2/3 . 4/6)
             ((* (sqrt 2) (sqrt 2)) . 2.0)
             (#\a . #\a)
             (#t . #t)
             ("B" . "B")
             ('informatik . 'INFORMATIK)
             (((lambda (x) (* x x)) (sqrt 2)) . (* (sqrt 2) (sqrt 2)))
             ((cons 1 (list 2)) . (list 1 2))
             ('(1 2 a b c d 3 4). '(1 2 a b c d 3 4))
             ('(1 2 (a (b (c)) d) 3 4). '(1 2 (a (b (c)) d) 3 4))))
</run>

=== Zusammenfassung ===

Die Vergleichsoperatoren geben den Wert <tt>#t</tt> zurück, wenn ... 

<table border="1" cellspacing="1" cellpadding="4">
<tr>
<td align="center" valign="top"><tt>equal?</tt><br />"gleich"</td>
<td valign="center">... die Operanden in Datentyp, Struktur und Inhalt gleich sind,</td>
</tr>
<tr>
<td align="center" valign="top"><tt>eqv?</tt><br />"gleicher"</td>
<td valign="center">... die Operanden in Datentyp und Wert gleich sind,</td>
</tr>
<tr>
<td align="center" valign="top"><tt>eq?</tt><br />"am gleichesten"</td>
<td valign="center">... die Operanden auf den selben Platz im Arbeitsspeicher verweisen.</td>
</tr>
</table>

Zurück zu [[Grundlagen der funktionsorientierten Programmierung mit SCHEME/Rekursionen|Rekursionen]] bzw. [[Grundlagen der funktionsorientierten Programmierung mit SCHEME/Komplexe Anwendungen: Numerische Listen|numerischen Listen]].