| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Prolog > Inner compound terms |
| Автор: JavaDell 7.5.2013, 00:00 |
| Есть задача создать предикат вида inner(Term, A), в котором Term - сколь угодно вложенный compound term с arity 1. Например a(b(c(d(o)))). Предикат должен отыскать и поместить в A самый вложенный терм, в данном примере это буква 'o'. Тоесть если дано inner( a(b(c(d(o)))), A ), вывод должен быть A = o. Я подошел к вопросу так: inner(Term, A) :- Term =.. [A|List], Term1 =.. List, inner(Term1, _). Превращать терм в список, отрубать голову, превращать обратно в терм и так далее. Проблема в том, что список когда-то закончится и я не могу понять как тут проверить на пустой список и остановить рекурсию с выводом оставшегося последнего терма. (Не пинайте сильно, я не настоящий сварщик.) |
| Автор: Фантом 7.5.2013, 00:25 | ||
У Вас что-то странное получилось. Надо как-то так:
Не самый эффективный вариант, но самый простой. |
| Автор: JavaDell 7.5.2013, 02:19 |
| Фантом, Благодарю. |