Я дам вам общее представление о том, что нужно сделать, и я позволю вам выяснить детали - я не хочу портить вам домашнее задание:
(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) список.