2012-04-02 5 views
2

Ich versuche, eine Array-ähnliche Datenstruktur in Scheme zu erstellen, und da ich oft darauf verweisen (und es ändern!), Möchte ich ihm einen Namen geben. Aber von dem, was ich auf verschiedenen Tutorial-Seiten gelesen habe, sieht es so aus, als ob die einzige Möglichkeit, die Liste zur späteren Referenz zu benennen, ist. Das wäre in Ordnung, außer es sieht auch so aus, als wenn ich eine Liste mit initialisiere, wird es komplizierter, die Liste zu ändern oder hinzuzufügen. Zum Beispiel scheint es, als ob ich nicht in der Lage wäre, nur (append wordlist (element)) zu tun, ich würde irgendwie brauchen! Knall.Benennen Sie eine Liste in Schema

Grundsätzlich meine Fragen zu kochen: Ist meine einzige Hoffnung, eine Liste zu nennen? Und wenn ja, bin ich fest, hüpfe durch Reifen und ändere seine Elemente? Vielen Dank.

Antwort

0

(append wordlist (element)) erstellt eine neue Liste. Was Sie wollen, ist, set! zu verwenden, um einen Verweis auf die neue Liste umzuleiten, oder einen Verweis auf die neue Liste, die den gleichen Symbolnamen verwendet.

2

Ja, ist der Weg für die Benennung von Dingen in Scheme. Eine normale Liste in Scheme erlaubt es Ihnen nicht, ihre Elemente zu ändern, weil sie unveränderlich ist - das ist eines der Dinge, mit denen Sie leben müssen, wenn Sie mit einer funktionalen Datenstruktur arbeiten. Natürlich können Sie Elemente hinzufügen oder Elemente entfernen, aber diese Operationen erzeugen neue Listen, Sie können die Elemente nicht direkt ändern. Die andere Option besteht darin, veränderbare Listen anstelle von normalen Listen zu verwenden. Wenn Sie jedoch gerade lernen, Scheme zu verwenden, ist es besser, zunächst an den unveränderlichen Listen zu bleiben und die Scheme-Methode für unveränderliche Daten kennenzulernen .

+0

AFAIK, sind Schema Listen nicht unveränderlich. Es gibt einige imperative Befehle, um ihre Elemente zu ändern. – Vincent

+0

Okay, danke für die Hilfe. Ich denke, ich kann die Dinge leichter machen, wenn ich neue Elemente an der Front anstelle der Rückseite hinzufüge ... – AmberWolfe

+0

@AmberWolfe das ist richtig! Die Vorderseite einer einfach verknüpften Liste ist der einfachste und am effizienteste Platz zum Hinzufügen von Elementen. Verwenden Sie "cons", um an der Vorderseite hinzuzufügen, und vergessen Sie nicht, dass es eine neue Liste erstellt, ändert es nicht die ursprüngliche Liste, und Sie müssten es erneut speichern –

1

Ja, definieren ist die Art und Weise zu tun "Zuweisung" (wirklich Benennung) in Scheme. Wenn Sie jedoch eine Art Paket schreiben, können Sie das Ganze in eine Funktion einfügen und dann etwas definieren, auf das Sie sich beziehen.

Dann müssen Sie natürlich eine Art Abstraktion haben, um die Funktionen in Ihrem "Paket" auszupacken.

Siehe SICP 2.5 Building System mit generischer Operation

http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-18.html#%_sec_2.5