![]() |
|
|
![]()
|
|
| JavaDell |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 33 Регистрация: 11.5.2011 Репутация: нет Всего: нет |
Есть задача создать предикат вида 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, _). Превращать терм в список, отрубать голову, превращать обратно в терм и так далее. Проблема в том, что список когда-то закончится и я не могу понять как тут проверить на пустой список и остановить рекурсию с выводом оставшегося последнего терма. (Не пинайте сильно, я не настоящий сварщик.) Это сообщение отредактировал(а) JavaDell - 7.5.2013, 00:11 |
|||
|
||||
| Фантом |
|
|||
![]() Вы это прекратите! ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1516 Регистрация: 23.3.2008 Репутация: 6 Всего: 49 |
У Вас что-то странное получилось. Надо как-то так:
Не самый эффективный вариант, но самый простой. |
|||
|
||||
| JavaDell |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 33 Регистрация: 11.5.2011 Репутация: нет Всего: нет |
Фантом, Благодарю.
|
|||
|
||||
![]()
|
| Правила форума Prolog | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Void. |
| 1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Prolog | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |