2013-05-22 2 views
0

Мы должны решить проблему liars в прологе в нескольких средах с ограничениями (ECLiPSe ic, ECLiPSe fd, SWI-пролог, GNU-пролог, NaxosSolver и т. Д.). Я использовал хвостовую рекурсию (я думаю) и столько сокращений, сколько я мог придумать (таким образом, я думаю, что дерево разрешения не настолько велико, как могло бы быть. По запросу я могу опубликовать свой код.Увеличение размера стека в ECLiPSe/пролог/fd

Когда номер данных становится 10000-50000, я получаю переполнение стека в fd и ic в ECLiPSe, а в SWI-прологе программа выполняется навсегда. Поэтому я хотел бы, чтобы увеличил размер стека в ECLiPSe, но я не вижу , как я попытался написать в 1-й строке моего кода это:

:-set_flag(local_stack_allocated, 512). 

, но он говорит, из диапазона

.

Посмотрите, что говорит eclipse, что может быть полезно: * Переполнение глобального стека, несмотря на сбор мусора! Вы можете использовать опцию «-g kBytes» (GLOBALSIZE), чтобы иметь больший стек. Пиковые размеры были: глобальный стек 128832 кбайт, стек след 5312 кбайт

+0

Ум ... Вы пытались добавить '-g 512' в командную строку, как это предлагает? –

+0

Как? Я так стараюсь -g 512, readclaims («liars50000.txt», I), лжецы (I, Sol). , но я получаю поток строк 27: синтаксическая ошибка: неожиданный токен – gsamaras

+0

К тому времени, когда вы доберетесь до '? -', Prolog уже запущен, и уже слишком поздно. Вам нужно передать аргументы командной строки Eclipse.Отредактируйте любое меню или значок, которые вы используете для запуска Eclipse, и добавьте там аргументы командной строки. Не в вашей программе. До. –

ответ

1

Во-первых, из текста сообщения об ошибке Я предполагаю, что вы имеете в виду ECLiPSe ограничение системы логического программирования, а не Eclipse IDE.

Во-вторых, как вы начинаете ECLiPSe? Как загрузить код в ECLiPSe?

Попробуйте это (вы сказл, что вы находитесь на Windows):

  1. Открыть командную строкой из папки, в которой (скажем, 'myprogram.ecl') существует ваш источник ECLIPSE файл. Инструкции смотрите на этой странице: http://www.techsupportalert.com/content/how-open-windows-command-prompt-any-folder.htm
  2. В командной строке введите eclipse -g 512000 и нажмите ENTER.
  3. Загрузите свою программу с помощью [myprogram]. (укажите имя исходного файла ECLiPSe вместо 'myprogram').
  4. Выполнять запросы как обычно.

Но я подозреваю, что ваша программа просто работает навсегда и ест всю память, поэтому все это, вероятно, не поможет в конце.

EDIT. Обновленные инструкции для TkECLiPSe:

  1. В меню TkECLiPSe выберите «Инструменты» -> «Редактор предпочтений TkECLiPSe».
  2. В окне предпочтения выберите опцию «Общий размер стека (в мегабайтах)» и установите ее на 512.
  3. Сохранить настройки и закрыть TkECLiPSe.
  4. В следующий раз, когда вы запустите TkECLiPSe, размер стека будет установлен на 512 Мб.
+0

Win7. Я просто нажимаю на значок и нажимаю File-> Compile. Затем я выполняю запросы. У меня есть исходные файлы (которые имеют расширение .pl, я пытался использовать .ecl, но такое же поведение) в Documents/Prolog, где eclipse был установлен в другом подфайле на «Компьютере». У меня также есть папка в меню «Пуск». Я попробовал из всех трех местоположений, открыл cmd, поместил то, что вы сказали, но получил следующее: «eclipse» не распознается как внутренняя или внешняя команда, операционная программа или командный файл. Поскольку он работает для входов с N = 10000, я думаю, мы можем попробовать. Благодарю. – gsamaras

+0

Он явно работает SWI-Prolog из своего рода режима Eclipse Prolog. Другими словами, да, IDE, а не ECLiPSe. –

+0

@ DanielLyons, просто google «Переполнение глобального/следного стека, несмотря на сбор мусора!». Это ECLiPSe CLP. И я видел эту ошибку раньше. –

Смежные вопросы