3

J'ai une procédure de déplacement qui applique un mouvement légal à une pièce d'échecs sur le plateau en passant une paire: (contre source dest) donc (contre 1 2) prend une pièce sur la position 1 de la J'essaie de faire une procédure qui applique le même mouvement que précédemment. J'ai essayé de fairedéplacer pour un jeu d'échecs

(mouvement (recul)) qui passerait (contre 2 1) en déplaçant ainsi la pièce en arrière.

Malheureusement, l'inverse ne fonctionne pas pour les paires. Je ne peux pas le convertir en une liste car cela devrait changer beaucoup de code pour accommoder le null à la fin.

Quelqu'un peut-il penser à quelque chose? J'utilise MIT Scheme en passant.

+0

Je ne me souviens pas bien de la syntaxe. Cherchez-vous quelque chose comme: (defun reverse-tuple (a b) '(b a)) –

+0

qui ne fonctionnerait pas très bien parce que la façon dont je reçois ma paire est en cartographiant des choses. le code deviendrait trop désordonné, donc je ne serais pas capable de faire simplement '(b a). – Art

Répondre

1

Vous devez implémenter votre propre procédure reverse-pair pour cela, il peut être aussi simple que cela:

(define (reverse-pair p) 
    (cons (cdr p) (car p))) 

Ou ceci, un peu de fantaisie, mais moins lisible:

(define (reverse-pair p) 
    `(,(cdr p) . ,(car p))) 

De toute façon il fonctionne comme prévu:

(reverse-pair '(1 . 2)) 
=> '(2 . 1) 
0

Si la fonction inverse ne fonctionne pas sur les paires, alors écrivez votre propre fonction de paire inverse. Je ne me souviens pas de la syntaxe du schéma pour cela mais je pense que vous avez déjà les outils pour cela, puisque vous auriez essentiellement besoin de savoir lire les deux valeurs de la paire (quelque chose que vous faites déjà sur votre fonction "move") alors comment construire un nouveau tuple basé sur ces données.

Je ne vois pas pourquoi vous pensez que cela compliquerait trop les choses non plus. En ce qui concerne le code en dehors de la nouvelle fonction, il ressemblerait à la version originale que vous avez proposée en utilisant la fonction "reverse".

0

Si vous vous limitez à des paires de `(a.b), il est assez facile de les retourner. Quelque chose d'aussi simple que

(define reverse-pair 
    (lambda (p) 
    (cons (cdr p) (car p)))) 

Will do it. De votre contexte, je comprends que vous ne serez pas dans la position où vous avez '(1 2 3 4 . 5) et que vous devez inverser cela, donc vous devriez être bien avec celui ci-dessus.

Questions connexes