2015-11-15 2 views
1

Я пытаюсь удалить элемент в списке. Мой код работает, но он не удаляет символ во вложенном списке.Пролог: Удаление атома во вложенных списках

Во втором-последнем правиле я пытаюсь проверить, является ли следующий элемент списком. Что я делаю не так?

del(Symbol, [], []) :- 
    !. 
del(Symbol, [Symbol|Tail], Result) :- 
    !, 
    del(Symbol, Tail, Result). 
del(Symbol, [[List]|Tail], Result) :- 
    !, 
    del(Symbol, List, Result2), 
    append([List], Result2, Result). 
del(Symbol, [Other|Tail], Result) :- 
    !, 
    del(Symbol, Tail, Result2), 
    append([Other], Result2, Result). 
+0

Пожалуйста, покажите конкретные запросы, которые вы ожидаете, чтобы преуспеть (вместе с ответами, которые вы хотите получить). – repeat

+0

Какова конкретная форма «вложенных» списков? Что-то регулярное, как матрицы (обычно представленные в Prolog как списки списков типа '[[a, b, c], [d, e, f]]'), возможно? – repeat

ответ

0

когда у вас есть рабочий дель/3 на плоском списке, вы можете продлить его обрабатывать вложенные списки, проверяя тип первого элемента: если это список, рекурсии и сохранить результат.

Чтобы проверить тип, вы можете использовать is_list/1

Смежные вопросы