Ich habe versucht, eine Funktion im Racket, die als (MakeList a b)
zählt und dann zeigt eine Liste, so dass (a, a+1, a+2, ..., b)
. Ich habe versucht, aber etwas online zu finden, wie man eine Liste erstellt und dann hinzufügt, aber ich habe sehr wenig hilfreiche Informationen gefunden. Jede Hilfe zur Erstellung dieser Funktion wäre großartig.Wie mache ich eine Zählliste im Racket zwischen zwei Variablen
Antwort
Ich verstehe, das ist mehr als wahrscheinlich ein Hausaufgaben-Problem. Wie @AlexisKing darauf hinweist, existiert die range
Funktion bereits. Aber wenn Sie dabei sind, dies selbst zu schreiben, würde ich gerne etwas Hilfe anbieten. Racket ist eine sehr lustige Sprache und ich möchte nicht, dass du dich entmutigt fühlst.
auf der hellen Seite der Suche, es klingt wie Sie meist, was Sie es brauchen
(a, a+1, a+2, ..., b)
So zu tun, beginnen Sie mit diesem
(define (make-list a b)
(cons a ...))
Was ...
ist hier tho? Nun, wie Sie in Ihrer erwarteten Ausgabe sagten ...
wären
(a+1 ... b)
So (a+1 ... b)
ist eine Liste a+1
-b
- oder mit anderen Worten: (make-list (add1 a) b)
gut, das ist einfach. Lassen Sie uns es ausfüllen.
(define (make-list a b)
(cons a (make-list (add1 a) b)))
Aber warten Sie, das sollte für Sie alarmierend sein. Warum? Weil wir einfach für immer weitermachen ...
Wir müssen unserem Programm sagen, irgendwann aufzuhören, oder? Aber wann sollte es aufhören?
Lassen Sie uns eine kleine Wahrheitstabelle schreiben, um uns zu helfen. Der Ausdruck für unseren Tisch wird (make-list 0 4)
a b previous stop?
0 4 N/A no
1 4 (0 ...) no
2 4 (0 1 ...) no
3 4 (0 1 2 ...) no
4 4 (0 1 2 3 ...) no
5 4 (0 1 2 3 4 ...) yes – (0 1 2 3 4) is the value we'd like
in Ordnung sein, so dass es ziemlich klar macht. Wenn a
größer alsb
ist, können wir unsere Liste fertigstellen. Denken Sie daran, um anzuzeigen, das Ende einer Liste, verwenden wir die leere Liste, empty
(define (make-list a b)
(if (> a b)
empty
(cons a (make-list (add1 a) b))))
Check it
(make-list 0 4) ;=> '(0 1 2 3 4)
(make-list 2 6) ;=> '(2 3 4 5 6)
(make-list 3 3) ;=> '(3)
(make-list 6 3) ;=> '()
Hier ist eine einfache & effiziente Art und Weise es in jedem Schema oder Lisp Implementierung zu tun:
Es beginnt mit einer leeren Liste, fügt b
hinzu, fügt kleinere hinzu und gibt das Ergebnis zurück, sobald eserreicht.
Racket ist für/Listenfunktion kann auch wie folgt verwendet werden:
(define (make-list a b)
(for/list ((i (in-naturals))
#:break (> i b)
#:when (and (>= i a) (<= i b)))
i))
(make-list 5 10)
Ausgang:
'(5 6 7 8 9 10)
Aber a und b müssen> = 0
Nach Schleife kann auch verwendet werden, um eine solche Liste zu erstellen:
(define (ml a b)
(let loop ((a a) (lst '()))
(if (> a b)
(reverse lst)
(loop (add1 a) (cons a lst)))))
(ml 5 10)
Ausgang:
'(5 6 7 8 9 10)
- 1. Wie mache ich zwei Variablen aus einem Positionsparameter?
- 2. Neudefinition eine Liste von Variablen in Racket
- 3. Wie schreibe ich einen Exponenten im Racket?
- 4. Zählliste für jedes Objekt
- 5. boxplot zwischen zwei Variablen
- 6. Wie mache ich einen Schatten zwischen zwei Tabellenansichten?
- 7. IN Racket eine Funktion, die zwei Argumente
- 8. Fehler beim Definieren im Racket
- 9. Bewerten von Variablen in Racket Antwort/xexpr
- 10. Webseite im Racket erstellen?
- 11. Makrodefinierendes Makro im Racket?
- 12. Wie SELECT SELECT WHERE ... zwischen zwei Variablen
- 13. Trunks im Racket zerschneiden
- 14. Lambda im Racket erklärt
- 15. Schlüsselwort und Standardargumentmakro interferieren mit variablen Argumenten im Racket
- 16. Wie mache ich eine solche Tabelle im Bootstrap?
- 17. POST/GET Bindungen im Racket
- 18. Wie mache ich eine globale Variable mit lokalen Variablen?
- 19. Wie mache ich eine if-Anweisung für 3 Variablen?
- 20. Wie verkettet man zwischen zwei Variablen?
- 21. && zwischen zwei Variablen außerhalb Bedingung
- 22. Wie mache ich eine Variable = zwei andere statt nur einer
- 23. In gehen, wie mache ich globale Variablen
- 24. Wie mache ich eine Verzögerung zwischen Capturing/Bubbling-Phase
- 25. Racket-Funktion mit zwei Argumenten
- 26. Wie mache ich zwei Koordinatenfelder, konzentrische Quadrate
- 27. , wie ich implodieren zwei Variablen
- 28. Wie mache ich eine Zwei-Zeilen-Option in Select-Tag?
- 29. Wie mache ich zwei Datenspalten in eine längere Datenspalte
- 30. Wie mache ich eine Methode akzeptieren Instanzen mit zwei Schnittstellen?
Die Funktion, die Sie suchen ist [ 'range'] (http://docs.racket-lang.org/reference/pairs.html#%28def._%28%28lib ._racket% 2Flist..rkt% 29._range% 29% 29) aus 'Schläger/Liste'. Wenn Sie es selbst implementieren müssen, klingt das wie Hausaufgaben. –
Was hast du versucht und welchen Fehler hast du bekommen? – nyedidikeke