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>
<eval 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))))
</eval>
=== 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 [[Komplexe Anwendungen: Numerische Listen|numerischen Listen]].