Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Prolog > Задача на Prologe со списком


Автор: alex1234 18.10.2010, 20:23
Добавление элемента к списку
Не знаю что с программой. По идеи всё правильно , а выводит ошибку 
(1003 Heap overflow. Not enough memory or an endless loop).

Текст программы:

DOMAINS
list=elem*
elem=integer

 PREDICATES
add(elem,list,list).

CLAUSES
add(X,L,[X|L]):-add(X,L,L1).

Goal:
         add(1,[1,2,4],L1).

В чём причина ошибки?

Автор: Фантом 18.10.2010, 21:05
Цитата(alex1234 @  18.10.2010,  20:23 Найти цитируемый пост)

Не знаю что с программой. По идеи всё правильно , а выводит ошибку 

Честно говоря, странно, что она вообще умудряется как-то работать.  smile 

Цитата(alex1234 @  18.10.2010,  20:23 Найти цитируемый пост)

В чём причина ошибки? 

Каждый раз при обращении к предикату add этот предикат возвращает список с добавленным к нему спереди элементом (что, по-видимому, и планировалось), а также вызывает сам себя еще раз (зачем - неизвестно). Получается бесконечная рекурсия, и в один прекрасный момент стек вызовов попросту переполняется.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)