Поиск:

Ответ в темуСоздание новой темы Создание опроса
> список в заданных границах, подсписок целых чисел между числами 
:(
    Опции темы
Tomsk11
Дата 6.9.2011, 12:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Привет всем!
пишу программу на Visual Prolog. Тема -списки.
буду благодарен за советы. 
Условие: Напишите предикат (?M,?N, ?L), истинный тогда и только тогда , когда L- список чисел, расположенных между M и N включительно (предикат должен допускать различное использование, когда не менее двух из трех аргументов конкретизированы). Указание: используйте предикаты var(+X) и nonvar(+X).
Мой алгоритм:
1. Пользователь вводит числа M, N и некий список L; 
2. если список L - нулевой, то тогда выход из программы. range(M,N,[]).
3. если список ненулевой, продолжаем....
4. сравниваем первый элемент (голову-H) списка L с числом M, если H=>M, тогда истина. 
5. сраниваем последний элемент (для этого нужно, как я понял, пройти рекурсивно весь список и найти последний элемент) с числом N, если G<=N, тогда истина. (G-последний элемент списка L)
как рекурсивно пройти весь список L  и найти последний элемент?

PM MAIL   Вверх
Tomsk11
Дата 6.9.2011, 12:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



получается, что предикат range(M,N,L) будет истинен при условии истинности пунктов 4  и 5
range (M,N,L):-isMember(M,L), itMember(N,L).

isMember(M,L)- предикат, который проверяет пункт 4, то есть выполнено ли условие H=>M
inMember(N,L)- предикат, который проверяет пункт 5, то есть выполнено ли условие G<=N
PM MAIL   Вверх
chaos
Дата 22.9.2011, 09:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

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



Цитата(Tomsk11 @  6.9.2011,  09:29 Найти цитируемый пост)
как рекурсивно пройти весь список L  и найти последний элемент?

пища для ума:

Код

length([]) :- 0.
length([Head | Rest]) :- 1 + length(Rest).

PM WWW   Вверх
chaos
Дата 22.9.2011, 22:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

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



Цитата(Tomsk11 @  6.9.2011,  09:29 Найти цитируемый пост)
как рекурсивно пройти весь список L  и найти последний элемент?

новая пища для ума smile
Код

last(A, [A|[]]).
last(A, [_|Rest]) :- last(A, Rest).

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

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

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


 




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


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

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