Common Lisp: immer alle Tasten einer gegebenen hash-Tabelle als Liste
Ich Frage mich, ob es eine weniger ausführliche Weise als mit Hilfe einer Schleife. Wie auch immer, das funktioniert für mich in CLISP:
(loop for key being the hash-keys of *my-hash* collect key)
Habe ich andere gesehen, die mit maphash
, sondern dass auch ansammeln jede Taste in einer Liste. Abgesehen davon, dass Sie mehr als involviert mit Schleife, es führt auch eine Nebenwirkung, die ich versuchen zu vermeiden, Wann immer ich kann - ich bevorzuge die funktionale Programmierung so viel wie möglich 🙂
Gibt es irgendetwas vordefiniert, wie dies für diese gemeinsame Aufgabe, auch wenn die Umsetzung-spezifisch sind?
(defun hash-keys (hash-table)
(loop for key being the hash-keys of hash-table collect key))
Du musst angemeldet sein, um einen Kommentar abzugeben.
Common Lisp stammt aus der Zeit vor "Batterien-inklusive" - Philosophie wurde weit verbreitet, und die meisten Funktionen erwartet werden, die von Bibliotheken von Drittanbietern und nicht von Implementierungen. Während Common Lisp wird manchmal als eine große Sprache, es ist nur im Vergleich zu C und ähnliche, die Sprache selbst ist ziemlich winzig im Vergleich zu Python und andere Sprachen mit massiver standard-Bibliotheken.
Für diesen bestimmten Zweck, Alexandria ist eine Häufig verwendete Sammlung von Common Lisp-utilities. Unter vielen anderen Dinge, die es enthält
hash-table-keys
.Gibt es keinen Nachteil bei der Festlegung
da in Common Lisp die Funktion kompiliert wird. Wenn Ihre Lieferanten, sofern diese Funktion, wäre es so ziemlich die gleiche Sache und tun nicht viel effizienter als die ihrige, wenn überhaupt.
In interpretierten Sprachen, fast alles, was Sie selbst schreiben hat einen performance-Nachteil im Vergleich zu einer "intrinsischen" - routine.
Consing sich der Inhalt eines hash ist verschwenderisch; Schleife können Sie die hash-ohne consing Speicher. Vielleicht möchten Sie ein makro statt (Einige Lisps bieten eine
dohash
oder ähnliches als Erweiterung).Oder eine hash-Zuordnung Funktion:
Sollte die Sprache jeden möglichen gadget wie diese, dass jeder schreiben kann in einer minute?
In Common Lisp gibt es inklusive Batterien, aber Sie sind andere Arten von Batterien: Dinge, die sind tatsächlich schwer zu tun. Zum Beispiel, ein
compile
Funktion für das dynamische kompilieren von code zur Laufzeit. Es wäre zu schwierig für die meisten Benutzer zu entwickeln, wie eine Sache von Grund auf im Vergleich zum ziehen Schlüssel oder Werte aus einer hash-Tabelle in ein halbes Dutzend verschiedener Möglichkeiten.