2017-04-03 2 views
0

J'essaye d'écrire une fonction dans Racket qui inversera l'ordre des paires. Par exemple, étant donné la liste '(1 2), la fonction devrait produire' (2 1). Voici mon code jusqu'à présent:Inverser l'ordre des paires

(define (reverse aList) 
    (cons (second aList) 
     (first aList)) 

Ceci ne donne pas la bonne réponse, cependant. Quand je teste avec '(a b) il renvoie ' (b) a) au lieu de '(b a). Comment puis-je me débarrasser de la période entre le b et un?

Répondre

1

Vous devriez avoir:

(define (reverse-pair lst) 
    (cons (second lst) (cons (first lst) empty))) 

Comme indiqué dans son Racket docs:

Les inconvénients fonction accepte effectivement les deux valeurs, et pas seulement une liste pour le second argument. Lorsque le second argument n'est pas vide et n'est pas lui-même produit par contre, le résultat s'imprime d'une manière particulière. Les deux valeurs jointes par contre sont imprimées entre parenthèses, mais avec un point (c'est-à-dire, une période entourée d'espaces) entre les deux.

Ainsi,

> (cons 1 2) 
'(1 . 2) 
> (cons 1 (cons 2 empty))  ; equivalent to (list 1 2) 
'(1 2) 
+0

Merci beaucoup Alexander !! – Vic