Was ist der Scheme-Funktion zum finden eines Elements in einer Liste?
Habe ich eine Liste von Elementen '(a b c) und ich wollen zu finden, wenn (wahr oder falsch) x ist, wobei x 'ein-oder 'd, zum Beispiel. Gibt es eine eingebaute Funktion dafür?
Verwenden Sie im Referenzhandbuch, um es zu finden: schemers.org/Documents/Standards/R5RS//HTML/...
InformationsquelleAutor Kai | 2009-03-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie brauchen, um zu vergleichen, verwenden Sie eine der build-in-äquivalenz-Operatoren, die Sie verwenden können,
memq
,memv
oderMitglied
, je nachdem, ob Sie möchten sich für die Gleichstellung miteq?
,(eqv?
odergleich?
, beziehungsweise.Wie Sie sehen können, diese Funktionen geben die Teilliste, beginnend bei der ersten passenden element, wenn Sie ein element. Dies ist, weil, wenn Sie sind auf der Suche eine Liste enthalten, booleans, die Sie brauchen, um in der Lage zu unterscheiden der Fall der Suche nach einem
#f
aus der Falle nicht finden, das element, das Sie suchen. Eine Liste ist eine wahre Wert (der nur false-Wert in Regelung ist#f
), so können Sie das Ergebnis dermemq
,memv
odermember
in jedem Kontext erwartet einen booleschen Wert, wie einif
,cond
,and
oderor
Ausdruck.Was ist der Unterschied zwischen den drei verschiedenen Funktionen? Es basiert auf dem äquivalenz-Funktion, die Sie verwenden für den Vergleich.
eq?
(und damitmemq
) testet, ob zwei Objekte die gleiche zugrunde liegende Objekt; es ist im Grunde äquivalent zu einem pointer-Vergleich (oder direkt-Wert-Vergleich im Fall von ganzen zahlen). So, zwei strings oder Listen, die gleich Aussehen, kann nichteq?
, weil Sie an verschiedenen Orten gespeichert sind, in den Speicher.equal?
(und damitmember?
) führt ein tiefer Vergleich von Listen und strings, und also im Grunde zwei Elemente, die print-mit der gleichenequal?
.eqv?
ist wieeq?
für fast alles, aber zahlen; denn zahlen, zwei zahlen, die numerisch äquivalent wird immereqv?
, aber Sie können nichteq?
(dies ist wegen der bignums und rationalen zahlen, die gespeichert werden können in einer Weise, so dass Sie nichteq?
)(Beachten Sie, dass das Verhalten der Funktionen ist nicht definiert durch die Spezifikation und kann somit unterscheiden sich von Implementierung zu Implementierung; ich habe Beispiele angeführt, sollte in jedem R5RS kompatibel-Schema implementiert, mit der genauen rationalen zahlen)
Wenn Sie brauchen, um die Suche nach einem Element in einer Liste mit einer äquivalenz-Prädikat anders ist, als man von den eingebauten lieben, dann möchten Sie vielleicht,
oder
Suche Schwanz
von SRFI-1:memq
kurze für?memq
ist einer dermember
Familie von Funktionen, Suche nach einem Element in einer Liste basierend auf irgendeine Art von äquivalenz (wie die anderen genannten,member
undmemv
). Dieq
,v
oder vollständigen Namen verbinden Sie es mit der drei-äquivalenz-Funktionen, die Sie jeweils verwenden;memq
verwendeteq?
zu testen Gleichwertigkeitmemv
verwendeteqv?
zu testen, äquivalenz-undmember
verwendetequal?
zur Prüfung der Gleichwertigkeit. Siehe die verlinkte Dokumentation über die Gleichwertigkeit Funktionen für den Unterschied zwischen Ihnen.Danke!!! So
memq
kann alsmem-q
, undmemv
alsmem-v
InformationsquelleAutor Brian Campbell
Hier ist eine Möglichkeit:
Mitglied gibt alles ab, wo das element ist, oder #f. Ein cond genutzt zu konvertieren, das Sie auf true oder false.
#t
auch in Ordnung ist, anstatt'#t
InformationsquelleAutor brian-brazil
Sind Sie auf der Suche nach "finden"
Grundlagen - Der einfachste Fall ist (Eintrag suchen Liste), in der Regel als ein Prädikat: "ist der Eintrag in der Liste?". Wenn es gelingt, finden Sie das element in Frage, es gibt das erste passende element statt nur "t". (Entnommen aus dem zweiten link.)
http://www.cs.cmu.edu/Groups/AI/html/cltl/clm/node145.html
-oder-
http://www.apl.jhu.edu/~hall/Lisp-Notes/Higher-Order.html
Gut, er tagged LISP.
Lesen Sie den Titel: "Was ist der SCHEME-Funktion zu finden, die ein element in eine Liste ein?'. Scheme ist ein Dialekt in der Familie der Lisp-Sprachen.
Wirklich? Es ist? Danke!
InformationsquelleAutor Kevin Crowell
Ich weiß nicht, ob es eine integrierte Funktion, aber Sie können erstellen:
Ỳou erhalten im Gegenzug die Anzahl der vorkommen von
x
in der Liste. Sie können erweitern es mittrue
oderfalse
zu.InformationsquelleAutor nensi