3

У меня есть процедура перемещения, которая применяет законный ход к шахматной фигуре на доске, пропуская пару: (cons source dest), поэтому (минус 1 2) берет кусок в позицию 1 из и перемещает его в положение 2.Переезд для шахматной игры

Я пытаюсь сделать процедуру, которая применяет тот же ход, что и раньше. Я попытался сделать

(перемещение (обратный ход)), который прошел бы (минус 2 1), тем самым перемещая кусок назад.

К сожалению, обратное не работает для пар. Я не могу преобразовать его в список, потому что это должно было бы изменить много кода для размещения нулевого значения в конце.

Неужели кто-нибудь может подумать? Кстати, я использую MIT Scheme.

+0

Я не очень хорошо помню синтаксис. вы ищете что-то вроде: (defun reverse-tuple (a b) '(b a)) –

+0

, что не будет работать очень хорошо, потому что способ, которым я получаю свою пару, - это сопоставление материала. код будет слишком запутанным, поэтому я не смог бы просто сделать это »(b a). – Art

ответ

1

Вы должны реализовать свой собственный reverse-pair процедуру для этого, это может быть так просто, как это:

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

Или это, немного фантазер, но менее читаемым:

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

В любом случае это работает по назначению:

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

Если обратная функция не работает на пары, тогда напишите свою собственную функцию обратной пары. Я не помню синтаксиса схемы для этого, но я думаю, что у вас уже есть инструменты для этого, так как вам в основном нужно знать, как читать два значения из пары (что-то, что вы уже делаете в своей функции «move») и то как построить новый кортеж на основе этих данных.

Я не понимаю, почему вы думаете, что это тоже слишком усложнит ситуацию. Что касается кода вне новой функции, он будет выглядеть так же, как и исходная версия, которую вы предложили, используя функцию «reverse».

0

Если вы ограничиваете себя парами `(a. B), то их легко перевернуть. Что-то простое, как

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

Будет. Из вашего контекста я понимаю, что вы не будете в том положении, где у вас есть '(1 2 3 4 . 5), и вам нужно отменить это, чтобы вы были в порядке с приведенным выше.