Frage

Okay das wie eine lächerliche Frage klingen mag, aber wie zurückkehren Sie eine Liste in Schema.?

Keine korrekte Lösung

Andere Tipps

Basierend auf einige Ihrer Fragen zu sehen, ich glaube, Sie Mühe, den Kopf um die Konzepte von zentraler Bedeutung für eine funktionale Sprache wie Scheme gewickelt werden können müssen.

Auf der Ebene Sie Scheme (Anfänger) sind zu lernen, jede Funktion, die Sie schreiben, hat einen Eingang und einen Ausgang hat, und den Körper von jeder Funktion ist ein einzelner Ausdruck. Was auch immer Wert, den Ausdruck ergibt sich durch die Funktion zurückgegeben. Es besteht keine Notwendigkeit, explizit „Rückkehr“ alles, wie man es in einer imperativen Sprache wie Java oder C; es passiert einfach als direkte Folge der Auswertung des Ausdrucks.

Der Körper einer Funktion ist ein einzelner Ausdruck. Es ist nicht wie Java, wo der Körper eines Verfahrens zur Herstellung einer Reihe von Anweisungen besteht:

do this
then do that
then do something else
then return something (maybe)

Scheme Funktionen auswerten einen einzigen Ausdruck; nichts mehr. Hier ist eine einfache Funktion, die 5, was auch immer Nummer hinzufügt wird als Argument übergeben:

(define (add5 x)
  (+ x 5))

Der Körper der Funktion ist (+ x 5), das ist nur ein Ausdruck ausgewertet werden. Der Wert von x ist angeschlossen, die + (Addition) Funktion x angewandt wird, und 5, und das Ergebnis wird zurückgegeben.

Listen sind nicht viel anders. Alles, was Sie brauchen, ist ein Ausdruck, der eine Liste bauen wird. Zwei wurden bereits erwähnt: Liste wird verwendet, um eine Liste von Grund auf neu zu bauen, wenn Sie bereits alle Elemente haben; cons verwendet, um ein einzelnes Element zu einer bestehenden Liste hinzufügen und oft rekursiv verwendet wird.

Hier ist eine Funktion, die eine Anzahl n verbraucht und baut die Liste (n n-1 n-2 ... 0)

(define (makelist n)
  (if (= n 0)
     (list 0)                       ; base case. Just return (0)
     (cons n (makelist (- n 1)))))  ; recursive case. Add n to the head of (n-1 n-2 ... 0)

sowohl in der Basis und rekursive Fällen wird eine Liste durch einfaches Auswerten eines Ausdrucks zurückgegeben, dass Anwendungen eine der Listengebäudefunktionen.

Hier ist ein weiteres Beispiel. Dies verwendet unsere add5 Funktion 5 bis jedes Element einer Liste von Zahlen zu addieren (lon):

(define (add5list lon)
  (if (null? lon)
    `()                 ; base case: lon is empty. Return an empty list.
    (cons (add5 (car lon)) (add5list (cdr lon)))))  ; recursive case.
                                                    ; Add 5 to the head of lon and prepend it to the tail of lon

Auch hier sowohl die Basis und rekursive Fälle kehren Listen von Ausdrücken, dass Ergebnis in Listen zu bewerten.

Das Wichtigste über Schema zu erinnern ist, alle Funktionen etwas zurückgeben, und das etwas ist einfach das Ergebnis eines Ausdrucks auswertet. Der Körper einer Scheme-Funktion ist ein einzelner Ausdruck.

Sie wollen wahrscheinlich einfach: '(2 3 5 7 11) oder (list 2 3 5 7 11)

?

Sie können auch Listen erstellen, indem ein Element spezifiziert und eine Liste hinzuzufügen, es zu: (cons 2 (cons 3 '()))

Hier ist ein Beispiel für eine Liste aus einer Funktion zurückkehrt:

(define returnlist 
  (lambda(a b c) 
    (cons a (cons b (cons c '())))
))

(returnlist 2 3 4)

Rückgabewert wird die Liste: (list 2 3 4)

Eine weitere nicht-so-gut bekannte Art und Weise, dies zu tun:

> ((lambda x x) 2 3 5 7 11)
(2 3 5 7 11)

, die wie folgt definiert wird, kann die Funktion „Liste“ selbst:

> (define list (lambda x x))
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top