Grundlagen der funktionsorientierten Programmierung mit SCHEME/Vergleichsoperatoren

Aus ProgrammingWiki

Wiki-Quelltext dieser Seite.

<language>SchemeJS</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="5ba420d042013">
(define vergleich
  (lambda (ls)
    (display "Nr."
             (string #\tab)
             "equal?"
             (string #\tab)
             "eqv?"
             (string #\tab)
             "eq?")
    (tabausgabe ls 1)))

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

<run id="5ba420d04209f">
(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]] / [[Grundlagen der funktionsorientierten Programmierung mit SCHEME/Komplexe Anwendungen: Numerische Listen|numerischen Listen]] bzw. [[Grundlagen der funktionsorientierten Programmierung mit SCHEME/Mehrfachrekursionen|Mehrfachrekursionen]].