equal?!?!?

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

equal?!?!?
erscheint einigen vielleicht dumm, die Frage jetzt erst zu stellen, aber kann mir mal einer ein Beispiel sagen, wo

> eqv ==> #f 

liefert und 

> equal ==> #t

den Unterschied dieser beiden Prädikate raff ich nicht so ganz…


ok… Frage hat sich geklärt… man sollte halt doch öfter in Scheme einfach a weng rumprobieren… hehe… :rolleyes:


weis du vielleicht noch die genauen unterscheidungens merkmale zwischen eq? , eqv? und equal? ? ich fand das im script einwenig schwammig. vorallem mach das eq? durch seine pingeligkeit ziemlich komische sachen.


ich glaub kaum, dass wir die internen prozesse eines scheme-interpreters gut genug kennen, um diese “komischen sachen” jemals zu verstehen…
mach einfach immer [tt][size=13]equal?[/size][/tt], das ist die allgemeinste version.
die anderen führen z.t. noch typ-prüfungen durch, die je nach eqv? und eq? unterschiedlich tief gehen. ich denke, die beispiele im skript sind immer noch am einleuchtendsten.


Für “allgemeine Sachen” würde ich eher [FONT=courier new]eqv?[/FONT] nehmen als [FONT=courier new]equal?[/FONT], das ist nämlich laut R5RS das Gleichheitsprädikat, das am ehesten mit unseren Vorstellungen von “Gleichheit” einhergeht. Wenn man z.B. Symbole vergleicht (wie man’s in den Dispatcher-Funktionen bei Objekten immer machen muss) liefert [FONT=courier new]equal?[/FONT] false, die andern beiden true.

Ansonsten sollte man, wo möglich, die typspezifischen Gleichheitsprädikate verwenden, z.B. [FONT=courier new]string=?[/FONT].


hä? also ich hab jetzt mal mein oop-beispiel rausgekramt… ich kann (wenn ich die messages einzeln vergleiche) beliebig eq?, eqv? und equal? verwenden, geht alles. und im skript is das so dargestellt, dass die funktionen von eq/eqv? bis equal? immer “intelligenter” werden, also auch mal strings oder listen vergleichen können. mir ist es ja ziemlich egal, ob 2 variablen so identisch sind, dass sie an der selben speicheradresse stehen, ich will i.d.r. nur deren inhalt vergleichen.


Stimmt, ich hatte mich da vertan. Allerdings würde ich [FONT=courier new]equal?[/FONT] nicht unbedingt als intelligenter bezeichnen, eher [FONT=courier new]eq?[/FONT] als strenger.