2017-10-08 4 views
0

Je suis en train d'avoir une liste comme ça ...Comment remplacer des éléments dans une liste imbriquée dans le schéma

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

et remplacer toutes les occurrences d'un certain nombre.

Par exemple lors de l'exécution

(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)))

La sortie souhaitée est

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

Ce que j'ai essayé est si loin

(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))) ))))

qui quand je lance pour remplacer tous des 1 avec un x la sortie est '(0 "x" 2)

Répondre

0

Vous êtes sur la bonne voie, il vous manque que l'application fait la fonction sur (car lst) chaque fois que le premier élément est une liste elle-même, à savoir:

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

De même, évitez d'utiliser des procédures intégrées comme noms de variables (par ex. list), et lors de l'utilisation de conditionnelles, au lieu d'imbriquer plusieurs instructions if, utilisez cond ou ses parents qui traduisent mieux à l'idée classique if ... else if ... else ....