Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.10.2011, 13:31   #1
Syn-McJ
Пользователь
 
Регистрация: 14.05.2010
Сообщений: 11
По умолчанию Prolog, ряд чисел, кратных 5

Доброго времени суток.
Мне требуется вывести ряд чисел, кратных пяти. Алгоритм реализован, и он работает, но, очевидно, реализован криво. Проблема в том, что преподаватель требует поддержки всего диапазона чисел типа integer. Однако моя программа категорически отказывается заводить в slist пол миллиарда (примерно) результатов, ссылаясь на ошибку GStack overflow. Я не силен в прологе, и мой алгоритм основан на примере из интернета, который тоже не был идеальным - переполнение стэка у него происходило очень рано, мне же удалось расширить диапазон поддерживаемых значений на несколько порядков, чего все ещё недостаточно. Размер GStack тоже был увеличен до максимального значения, с которым выполняется построение программы, что так же не помогло. Как я подозреваю, проблема может быть связана с недостаточным пониманием механики отсечений. Пожалуйста, укажите на проблему, если таковая есть. Заранее спасибо за помощь.

Код:
predicates

  nondeterm find(integer From, integer To, slist List)
  nondeterm toList(integer From, integer To, slist List)

clauses

  find(From, To, []):-From>To, !.
  find(From, To, List):-From mod 5 = 0, toList(From, To, List),!.
  find(From, To, List):-N = From + 1, find(N, To, List).
  
  toList(From, To, []):-From>To, !.
  toList(From, To, [Str|List]):- From < To, str_int(Str, From), !, N = From + 5, toList(N, To, List).
Первым происходит вызов find. Работаю в Visual Prolog 5.2, максимальный диапазон без переполнения - от 1 до 50000000 (или около того), то есть в список заносится примерно 10000000 значений.
Syn-McJ вне форума Ответить с цитированием
Старый 23.10.2011, 19:55   #2
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

если надо просто вывести - то список ненужен.
rrrFer вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
задание. Вычислить сумму чисел кратных 7 которые меньше 400 sunny5442 Помощь студентам 12 27.05.2010 07:34
Количество чисел кратных двум V@mpir Общие вопросы Delphi 7 25.04.2009 21:14
Дана последовательность с n целых чисел. Найти количество елементов, кратных ее первому елементу Alex1991 Помощь студентам 3 10.03.2009 09:02
Найти сумму всех чисел из промежутка от А до В, кратных 8 и 16 nickky2 Паскаль, Turbo Pascal, PascalABC.NET 8 05.12.2008 13:27
вычисление суммы чисел, кратных 3 из последовательности, состоящей из 10 чисел, заранее заданных Белка Помощь студентам 3 27.10.2007 11:53