Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Inner compound terms 
V
    Опции темы
JavaDell
Дата 7.5.2013, 00:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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
PM MAIL   Вверх
Фантом
Дата 7.5.2013, 00:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вы это прекратите!
***


Профиль
Группа: Участник Клуба
Сообщений: 1516
Регистрация: 23.3.2008

Репутация: 6
Всего: 49



У Вас что-то странное получилось. Надо как-то так:
Код

inner(Term,A):- Term =.. L, L=[A|[]].
inner(Term,A):- Term =.. L, L=[_|T], Term1 =..T, inner(Term1,A).

Не самый эффективный вариант, но самый простой.
PM   Вверх
JavaDell
Дата 7.5.2013, 02:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 11.5.2011

Репутация: нет
Всего: нет



Фантом,  Благодарю.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума Prolog
Void
  • Пожалуйста, создавайте темы с содержательными названиями.
  • Уважаемые учащиеся, здесь всегда рады помочь Вам, но не делать за Вас вашу работу. У вас гораздо больше шансов получить помощь, если Вы приложите усилия и поделитесь с нами проблемами и результатами. В противном случае добро пожаловать в раздел Центр Помощи.
  • Получив ответ на интересующий Вас вопрос, не забудьте пометить его как решённый.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Void.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Prolog | Следующая тема »


 




[ Время генерации скрипта: 0.0402 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.