2010-12-15 34 views
2
(define (delete atm lis) 
    (cond 

    ((eq? atm (car lis)) (cdr lis)) 
    (else (cons (car lis) (delete atm (cdr lis)))))) 

(delete 'a '(b c d a)) 
(delete 'the '(the more you practice the better you will be)) 
(delete 'cat '((dog cat) mouse cat (elephant) (cat) cat)) 
(delete 'rainy '(the weather can be (rainy) sunny cloudy and cold)) 

la sortie que je veux sontSchéma Comment supprimer les éléments d'une liste?

  1. (DCB)
  2. (plus vous pratiquez mieux vous serez)
  3. ((chien chat) souris (éléphant) (chat))
  4. (le temps peut être (pluvieux) nuageux ensoleillé et froid)

mais il y a beaucoup de mal, s'il vous plaît aidez-moi, merci

Répondre

1

Vous ne faites rien enlever actuellement. Votre procédure est généralement appelée remq.

Ce qui suit devrait fonctionner (non testé):

(define (delete atm lis) 
    (cond 
    ((null? lis) lis) 
    ((eq? atm (car lis)) (delete atm (cdr lis))) 
    (else (cons (car lis) (delete atm (cdr lis)))))) 
+0

Mais si l'atome que je veux trouver n'est pas le premier élément de la liste, il a encore tort. Peux-tu me dire pourquoi? – Lilo

+1

@Lilo: Tu ferais mieux de nous dire ce qui est "faux", puisque la réponse de leppie est correcte. – erjiang

0

Vous avez besoin d'un cas de base et même lorsque vous trouvez l'atmosphère que vous voulez, vous voulez toujours continuer récursion dans la liste.

(define (delete atm lis) 
    (cond 
    ((null? lis) '()) 
    ((eq? atm (car lis)) (delete atm (cdr lis))) 
    (else (cons (car lis) (delete atm (cdr lis)))))) 
+0

Oups désolé, c'est la même chose que lepie. J'ai testé cela et ça fonctionne. – user479988

1

Les deux autres réponses (qui sont identiques, en passant) ne fonctionnent actuellement qu'au niveau supérieur de la liste. Si vous voulez aussi supprimer votre atome de toutes les listes imbriquées, vous devez rechercher là aussi:

(define (delete atm lis) 
(cond 
    ((null? lis) lis) 
    ((eq? atm (car lis)) (delete atm (cdr lis))) 
    ((list? (car lis)) (cons (delete atm (car lis)) (delete atm (cdr lis)))) 
    (else (cons (car lis) (delete atm (cdr lis)))))) 

Si cela est ce que vous voulez, peut-être vous pouvez spécifier ce qu'il est exactement ce qui se passe mal. Vous continuez à dire que quelque chose, ou beaucoup de choses, ont tort, mais ne spécifiez pas ce que c'est. Par exemple, vous pouvez spécifier ce que vous attendez de la sortie de vos quatre exemples.