2017-10-08 5 views
0

ich so eine Liste zu haben, ich versuche ...Wie in Schema-Elemente in einer verschachtelten Liste ersetzen

'((0 1 2) (3 4 5) (6 7 8) (0 3 6) (1 4 7) (2 5 8) (0 4 8) (2 4 6))

und alle Vorkommen einer bestimmten Anzahl ersetzen.

Zum Beispiel, wenn

(replace 4 "x" '((0 1 2) (3 4 5) (6 7 8) (0 3 6) (1 4 7) (2 5 8) (0 4 8) (2 4 6)))

die gewünschte Ausgabe läuft

'((0 1 2) (3 x 5) (6 7 8) (0 3 6) (1 x 7) (2 5 8) (0 x 8) (2 x 6)))

Was ich versucht habe, so weit ist

(define (replace var player list) (if (null? list) '() (if (list? (car list)) (replace var player (cdr list)) (if (equal? var (car list)) (cons player (replace var player (cdr list))) (cons (car list) (replace var player (cdr list))) ))))

Was, wenn ich laufen alle 1 mit einem x der Ausgang '(0 "x" 2)

Antwort

0

Sie auf dem richtigen Weg sind, ist zu ersetzen, sind Sie eigentlich nur die Funktion auf (car lst) Anwendung, wenn das erste Element eine Liste selbst ist, das heißt:

... 
(if (list? (car list)) 
     (cons (replace var player (car list))   ;; missing this 
      (replace var player (cdr list))) 
     (if ... 

Vermeiden Sie auch die Verwendung von integrierten Prozeduren als Variablennamen (z. B. list), und wenn Sie Conditionals verwenden, anstatt mehrere if Anweisungen zu verschachteln, verwenden Sie cond oder seine Verwandten, die besser auf die herkömmliche if ... else if ... else ... Idee übertragen werden.

Verwandte Themen