Ich benutze clisp und ich frage mich, ob es eine Bibliothek mit einer einstellbaren Version von nthcdr gibt, die ich verwenden kann.Gibt es eine einstellbare nthcdr-Implementierung?
7
A
Antwort
5
Sie können um es hacken mit:
(let ((lst (list 1 2 3 4))
(n 2))
(setf (cdr (nthcdr (1- n) lst)) '(5 6 7))
l)
> (1 2 5 6 7)
Oder Ihre eigene setf für sie definieren:
;; !!warning!! only an example, lots of nasty edge cases
(defsetf nthcdr (n lst) (new-val)
`(setf (cdr (nthcdr (1- ,n) ,lst)) ,new-val))
Ich weiß nicht, warum nthcdr definiert keine setf haben. Sogar Alexandria scheint setf für den letzten, aber nicht nthcdr zu definieren.
PS. Ich würde behandeln, wenn ich einen nthcdr als einen schlechten Geruch in Ihrem Code festlegen möchte.
1
(defsetf my-nthcdr (n list) (store)
(let ((tmp (gensym)))
`(let ((,tmp (nthcdr (1- ,n) ,list)))
(rplacd ,tmp ,store)
(cdr ,tmp))))
funktioniert nicht, wenn n 0 ist aber, könnte man es funktioniert, wenn LIST ein Symbol ist, zu überprüfen, ob N Null entweder auf macroexpansion Zeit, aber dann funktioniert es nur, wenn N eine Zahl ist, oder einschließlich der Überprüfung im erweiterten Code.
Verwandte Themen
- 1. Benutzer-einstellbare Datenstrukturen
- 2. Swift-Protokoll einstellbare Eigenschaft durch eine schreibgeschützte Eigenschaft
- 3. Wie erstellen Sie 3 einstellbare Divs?
- 4. Gibt es eine Möglichkeit, unveränderlichen Entitäten im Entitätsrahmen zuzuordnen?
- 5. Gibt es eine Kartenfunktion?
- 6. Gibt es eine Verknüpfung
- 7. Gibt es eine Möglichkeit, dass es jemals PHP.NET gibt?
- 8. Gibt es eine AutoHotkey REPL?
- 9. Dragover - gibt es eine Verschiebung?
- 10. Gibt es eine Predis-Dokumentation?
- 11. Gibt es eine "faule Map"?
- 12. Gibt es eine bessere Designoption?
- 13. Gibt es eine WinForm-Steuerinspektoranwendung?
- 14. Gibt es eine utf8_unicode_cs Kollation?
- 15. Gibt es eine generische Task.WaitAll?
- 16. Wiki-Datenbank, gibt es eine?
- 17. Gibt es eine CapitalizeFirstLetter-Methode?
- 18. Gibt es eine Scala-Identitätsfunktion?
- 19. Gibt es eine mobile Bilderkennungsbibliothek?
- 20. Gibt es eine parallele Flutfüllungsimplementierung?
- 21. Gibt es eine Bing-API?
- 22. Gibt es eine Python-Sprachspezifikation?
- 23. Gibt es eine einfache Histogrammfunktion?
- 24. Gibt es eine Bibliothek getNLMultibutton?
- 25. Gibt es eine UML-Referenzkarte?
- 26. Gibt es eine MAKELONGLONG-Funktion?
- 27. Gibt es eine Instruments API?
- 28. Java: Gibt es eine Kartenfunktion?
- 29. Gibt es eine Datetime ± Unendlich?
- 30. Gibt es eine suPHP-Alternative?
Warum ist es ein schlechter Geruch? Vor allem, wenn Sie andeuten, dass es keinen Grund gibt, kein definiertes nthcdr zu definieren. – Paralife
Der Grund, warum ich es will, ist, dass ich jeden Knoten eines Sexp mit einem ID-Element injizieren und gleichzeitig jeden Knoten in einer Hash-Tabelle speichern möchte, während ich den Sexp-Baum durchquere. Wenn also die Dekoration nicht direkt erfolgt, sehen die Werte in der Hash-Tabelle die dekorierten Unterknoten nicht. – Paralife
Beachten Sie, dass in Common Lisp generell nicht definiert ist, was passiert, wenn Sie Literaldaten ändern. –