проверка на равенство по всем показателям списка - PullRequest
2 голосов
/ 11 декабря 2011

Я хочу взять два списка одинаковой длины и вернуть список всех индексов, где списки не равны друг другу.

Например, если я введу ("orange" "yellow" "green" "green") и ("orange" "green" "yellow" "green"), я буду ожидать возврата (1 2) ((при условии, что индексы списка начинаются с 0 в схеме)).

Какя должен идти об этом?

1 Ответ

1 голос
/ 12 декабря 2011

Я дам вам общее представление о том, что нужно сделать, и я позволю вам выяснить детали - я не хочу портить вам домашнее задание:

(define (unequal-indexes lst1 lst2)
  (unequal-aux lst1 lst2 XXX1))

(define (unequal-aux l1 l2 idx)
  (cond ((null? l1) 
         XXX2)
        ((equal? (car l1) (car l2))
         XXX3)
        (else
         XXX4)))

Во-первых, вы должны понять, что вам нужен способ отслеживать индекс, на котором вы находитесь.Для этого я определил вспомогательную процедуру unequal-aux, которая вызывается из основной процедуры unequal-indexes.В приведенном выше коде заполните поля:

  • XXX1 : что такое начальный индекс?
  • XXX2 : чтодолжен быть возвращен, если список пуст?имея в виду, что мы хотим вернуть список индексов
  • XXX3 : что произойдет, если текущие элементы в обоих списках равны?подсказка: рекурсия должна продолжаться в обоих списках, и индекс должен увеличиваться, но мы не добавляем элемент в создаваемый список
  • XXX4 : что произойдет, если текущие элементы в обоих списках разные?подсказка: рекурсия должна продолжаться в обоих списках, и индекс должен увеличиваться, и на этот раз мы делаем добавляем элемент в создаваемый список - какой элемент?индекс, в котором мы сейчас находимся

Конечно, к настоящему времени вы должны знать, что список строится путем cons - каждого элемента до остальной части списка, пока мы не достигнем пустого (null) список.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...