Вы должны рекурсивно go вниз список A
, составить список Aout
, охватывая буксирные случаи:
- Элемент
X
на кончике A
находится в списке B
-> забыть о X
, recurse (действительно, заполнить индуктивное определение для my_set_difference(A,B,Aout)
) - Элемент
X
на кончике A
не является списком B
-> оставьте X
для Aout
, рекурсивный (действительно, заполните индуктивное определение для my_set_difference(A,B,Aout)
) - Базовый случай:
A
пуст. Очевидно, что Aout
также должен быть пустым.
Вышеприведенное естественным образом сопоставлено двум пунктам для предиката my_set_difference(A,B,Aout)
.
Поскольку у вас нет member/2
для проверьте, находится ли кончик A
в списке B
, вам нужно запрограммировать look(X,B)
, который ищет X
в B
путем сканирования B. Это полностью аналогично приведенному выше, но вы можете остановиться рано, если найдете X
в B
.
Примите это, это простое упражнение.