Ich möchte eine Liste von Quadraten machen. Ich kann es mit folgendem Code:Verwenden von Cons/Auto vs Append zum Erstellen von Listen in Racket
(define (makelistsq n)
(define outlist '())
(for ((i n))
(set! outlist (append outlist (list (* i i))))
)
outlist
)
(makelistsq 5)
Ausgang:
'(0 1 4 9 16)
Aber ich habe gesehen, dass oft Nachteile und Auto Schlüsselwörter verwendet werden, um zu erstellen und zu Listen hinzufügen. Hat diese Methode einen Vorteil gegenüber dem Anhängen wie oben? Also, folgt besser oder gleich wie oben:
(define (makelistsq2 n)
(define outlist '())
(for ((i n))
(set! outlist (cons (* i i) outlist))
)
(reverse outlist)
)
Vielen Dank für Ihre Antworten/Kommentare.
Edit: auf dieser Seite Cons element to list vs cons list to element in Scheme wird erwähnt, dass alle Verwendung von append falsch ist:
Für den seltenen Gelegenheiten, in denen Sie ein Element am Ende hinzuzufügen (und glauben Sie mir, tun so allgemein bedeutet, dass Sie denken, der Algorithmus falsch) Sie können Append
Ich sehe, dass Sie den Fall von Schema bekommen zu kämpfen hat. Bitte schnappen Sie sich ein Buch (SICP, Wie man Programme gestaltet, The Little Schemer) und lesen Sie, lesen Sie, bis Sie den Weg zum Schreiben von Code in Scheme verstehen. Bis jetzt versuchen Sie, Prozeduren zu schreiben, wie Sie es in einer imperativen Programmiersprache tun würden, und das ist definitiv nicht der richtige Weg, wenn Sie ein Lisp lernen. –