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]] bzw. [[Grundlagen der funktionsorientierten Programmierung mit SCHEME/Komplexe Anwendungen: Numerische Listen|numerischen Listen]].