2009-10-16 4 views
1

D'accord ceci est ma quatrième question aujourd'hui sur Scheme, encore assez nouveau à Scheme, comme je l'avais besoin pour un de ma sous-fonction I asked earlier dans la journée.Comment assigner Mulitpule valeur cachée dans la liste dans le schéma

Fondamentalement, cela me retournera la différence de 2 listes. Dites que vous avez (1,5) et (5,1) cette fonction devrait me revenir 8. Comme c'est la distance entre l-w

Voici ce que j'ai. Note: si je change la (liste (- (voiture l) (voiture w))) en (écrire .....) la fonction fonctionnera, mais en sortie 2 nombre dont je n'ai aucune idée comment utiliser ces nombres comme entrées de mon autre fonction.

J'essaie donc de le mettre en liste, mais ne fonctionne pas vraiment, il me retourne sans erreur, mais des trucs bizarres

(define (difference l w) ; calc heuristic function estimation 
    (if (> (car l) (car w)) 
     (list (- (car l) (car w))) 
     (if (< (car l) (car w)) 
     (list (- (car w) (car l))))) 
     (if (< (list-ref l 1) (list-ref w 1)) 
      (list (- (list-ref l 1) (list-ref w 1))) 
      (if (> (list-ref l 1) (list-ref w 1)) 
       (list (- (list-ref w 1) (list-ref l 1))))) 
    ) 

Voici le code retourné me

> (difference '(9 1) '(3 1)) 
#<procedure:...0\assigment 2.ss:50:3> 

Des idées? essayer d'utiliser lambda fin-up la même chose.

+0

Quelqu'un ?? help plz – Jonathan

+0

Je ne suis pas sûr de comprendre ce que votre fonction essaie de faire. –

+0

fondamentalement, j'essaie de calculer la différence de 2 éléments de la liste 2. Dire que j'ai obtenu 1 de mon premier article dans la liste A et 2 de mon premier article dans la liste B. Je veux voir lequel est le plus grand d'abord, puis faire la soustraction, il me renvoie la différence du 1er élément de la liste. Même chose avec le deuxième élément de la liste. Une fois que j'ai eu les deux numéros, je les ai additionnés, j'ai eu la différence totale, dans mon cas, la distance de A à B – Jonathan

Répondre

1

Eh bien d'abord, il y a une faute de frappe dans votre code ...

(lits (- (car w) (car l))))) 

devrait être ...

(list (- (car w) (car l))))) 

EDIT: Est-ce quelque chose comme ce travail?

(define (difference lst1 lst2) 
    (if (> (car lst1) (car lst2)) 
     (+ (- (car lst1) (car lst2)) (difference (cdr lst1) (cdr lst2))) 
     (+ (- (car lst2) (car lst1)) (difference (cdr lst1) (cdr lst2)))) 
) 
+0

oopz J'utilisais write à la place et ça marche bien, mais je ne peux pas utiliser la sortie dans une entrée. Aucune utilisation pour moi d'utiliser la fonction d'écriture ou d'affichage. Donc, j'essaie d'utiliser les inconvénients, ajouter, liste aucun d'entre eux fonctionne – Jonathan

+0

Quelque chose comme ça ...? –

+0

le bizarre que je n'ai pas utilisé cdr est parce que la voiture me renvoie un nombre plutôt cdr me renvoie un numéro d'une liste. Oui, c'est pourquoi j'utilise le list-ref pour m'assurer que je peux faire le calcul. – Jonathan

0

Je sais que c'est une vieille question, mais j'ai juste écrit quelque chose comme ça. Voici ma solution

(define (difference l1 l2) 
    (apply + (map abs (map - l1 l2)))) 
Questions connexes