4 Stimmen

Schema übergibt Variablen an eine variadische Funktion

Ich habe die folgende variadische Funktion (define doSomething (lambda (x . rest) .... Die Funktion wird durch Zahlen aufgerufen, zum Beispiel: (doSomething 1 2 3 4 5) (also mit diesem Aufruf wäre x 1 und rest wäre (2 3 4 5)).

Wenn ich versuche, die Funktion rekursiv aufzurufen und die zweite Zahl (2) als x und rest als (3 4 5) zu setzen, erhalte ich irgendwie den rest Parameter als eine Liste von Listen: ((3 4 5)).

So versuche ich derzeit die Funktion erneut aufzurufen: (+ x (doSomething (car rest) (cdr rest)))

Es ist erwähnenswert, dass ich Pretty Big benutze. Bitte beraten Sie mich, danke.

2voto

hexist Punkte 5111

Also, du mischst und passt das, was der Rest ist, in deinem ersten Aufruf, an

(doSomething 1 2 3 4 5)   ; x = 1  rest = '(2 3 4 5)

In den nachfolgenden Aufrufen wirst du am Ende landen mit

(doSomething (car rest) (cdr rest))   ; x=2  rest = '((3 4 5))

weil rest ein variadisches Argument ist, also nimmt es alles nach dem ersten Argument und macht daraus eine Liste namens rest für dich, daher die doppelte Listung. Du möchtest wahrscheinlich apply oder so verwenden, also etwas in der Art:

(define doSomething (lambda (x . rest) 
                      (display x) 
                      (if (not (null? rest))
                        (apply doSomething rest)
                        #f)))

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X