Есть две проблемы:
1- Почему переводчик повышения Предупреждение: соответствие шаблону не является исчерпывающей ошибкой
2- Что можно сделать, чтобы код работал.
Что касается первого пункта, причина предупреждения заключается в том, что вы не проверяете каждую возможную возможность. Функция delete
, как это в настоящее время составляет чеки только две возможности:
-1 Второй список является пустой список (охватываемых схеме: _ [] =
)
-2 Оба списка не является пустым (охватываемый второй рисунок: (h1::t1) (h2::t2) =
)
Однако есть и третья возможность, а именно первый список, являющийся пустым списком. Следовательно, следующий ввод приведет к ошибке: delete [] [1,2,3,4,5,6]
Что касается второго пункта, если точное требование состоит в том, чтобы удалить из второго списка элементы первого списка подряд и только один раз, то ваше решение очень близко , Филиал else
в порядке, только филиалу then
нужно больше внимания. При коррекции then
ветви я получаю следующие результаты:
delete [4,5] [1,2,3,4,5,6,7,8] = [1,2,3,6,7,8];
delete [5,4] [1,2,3,4,5,6,7,8] = [1,2,3,4,6,7,8];
delete [4,4,5] [1,2,3,4,5,6,7,8] = [1,2,3,5,6,7,8];
delete [4,5,6] [1,2,3,4,5,6,7,8] = [1,2,3,7,8];
delete [4,6,5] [1,2,3,4,5,6,7,8] = [1,2,3,5,7,8];
delete [4,6,5] [1,2,3,4,6,7,8,5] = [1,2,3,7,8];
Однако, если вы хотите удалить все элементы первого списка, происходящий во втором списке, независимо от их порядка, то вам нужно будет пересмотреть свой подход.
, например, если вы хотите следующий результат:
delete [4,6,5] [1,2,3,4,4,5,5,5,4,4,6,6,5,5,6,6,6,6,6,7,8,5] = [1,2,3,7,8];
, то вам необходимо сделать это в два этапа: Сначала напишем функцию del
, что данный один элемент удалит все его вхождения в список: fun del e l = ...
Его реализация практически идентична той, которую вы предоставили для delete
, за исключением того, что вам нужно будет немного изменить ветвь then
.
После того, как у вас есть del
, теперь вы можете реализовать функцию delete
, которая, учитывая список, удалит все вхождения этого списка во втором списке.Здесь вы будете использовать ранее определенную функцию del
.
Спасибо за интересный ответ! Моя первоначальная цель состояла в том, чтобы просто удалить элементы в том же порядке, что и первый список, но теперь это помогло мне просмотреть его по-разному. Мне удалось исправить код, исправив ветку «then»! – Arjun