[Закрыть]
 
popoff.donetsk.ua
Всё, что параллельно - то лежит. Всё, что перпендикулярно - то стоит. А всё, что не перпендикулярно, и не параллельно - то валяется!
Начало | Новости | Статьи | Форум | Опросы | Карта сайта | Обо мне
popoff.donetsk.ua - Форум - Функциональное и логическое программирование - Генератор списка со случайными числами на Прологе

Генератор списка со случайными числами на Прологе

форумы popoff.donetsk.ua
Страницы: [1]
<< Новый  |  Старый >>  |  Ответ не возможен

Внимание! Этот топик устарел. Пожалуйста, создайте новый топик, чтобы задать интересующий Вас вопрос.

Автор Сообщение
bvn
Владимир
Июн, 2008
Сообщений: 5
bvn url://forum.message:2505
Генератор списка со случайными числами на Прологе

Попытался сделать програмулю по формированию списка случайных чисел (Турбо Пролог), но чего-то не досмотрел. Она циклится. Нужна помощь. Если - возможно выложу исходник

Это сообщение было отредактировано popoff 11.06.08 19:05.
popoff
Yuri
Июл, 2004
Сообщений: 923
popoff url://forum.message:2506

bvn,
Вы не задали вопрос.

________________________________
Если не будет деревьев — нам нечем будет дышать, если вода загрязнится — нам нечего будет пить.
bvn
Владимир
Июн, 2008
Сообщений: 5
bvn url://forum.message:2507

Задачку я себе задал следующую.
Составить на Прологе генератор случайных чисел, которые формируются в
список.
Вроде бы сделал, НО
1)Граничный результат зацикливает генератор, т.е. я (для примера)формирую
список из 10 чисел (0..9)
и на 10ом числе список не останавливается. А почему?
2)В гоале мой список из 9 чисел формируется, но не возвращается.Пусто! А
почему?

domains
rand=int*
int=integer

predicates
list_rand(rand)
in(int,rand)
len(rand,int)


clauses
list_rand(List):-
random(10,I),
len(List,Len),
Len=10,!,
in(I,List),
write(List),nl,
list_rand(List).

%принадлежит?
in(E,[E|_]):-!.
in(E,[_|T]):-in(E,T).

%Длина
len([],0).
len([_|T],G):-
len(T,G1),
G=1+G1.

goal
list_rand(S),write(Spisok: ,S)

popoff
Yuri
Июл, 2004
Сообщений: 923
popoff url://forum.message:2512
domains
  n=integer
  lrand=n*
predicates
  random_list(lrand,integer)
goal
  random_list(X,10),
  write(X).
clauses
  random_list([],0).
  random_list([H|T],N):-
    N>0,
    random(10,H),
    N1=N-1,
    random_list(T,N1).
~~~~~ 11 Июн 2008, 15:55, спустя 7 минут ~~~~~

1)Граничный результат зацикливает генератор, т.е. я (для примера)формирую
список из 10 чисел (0..9)

bvnфорумы popoff.donetsk.ua

Генератор зацикливается, так как в Вашем предикате list_rand() отсутствует условие завершения рекурсии.

)В гоале мой список из 9 чисел формируется, но не возвращается.Пусто! А
почему?

bvnфорумы popoff.donetsk.ua

Возврат происходит в момент завершения работы предиката. Возврат не происходит потом, что Ваш предикат list_rand() никогда не завершит свою работу (или завершит по фатальной ошибке - нехватка памяти).

________________________________
Если не будет деревьев — нам нечем будет дышать, если вода загрязнится — нам нечего будет пить.
bvn
Владимир
Июн, 2008
Сообщений: 5
bvn url://forum.message:2515

Но я же ставлю ограничение на длину списка, но это не срабатывает

popoff
Yuri
Июл, 2004
Сообщений: 923
popoff url://forum.message:2516

bvn,
Вы хотите, чтобы я Вас поуговаривал  добавить условие завершения рекурсии?

Написано же ясно - зависает, так как отсутствует условие завершения рекурсии. При чём тут ограничение на длину списка?

________________________________
Если не будет деревьев — нам нечем будет дышать, если вода загрязнится — нам нечего будет пить.
bvn
Владимир
Июн, 2008
Сообщений: 5
bvn url://forum.message:2517

Против рекурсии ничего против не имею Просто я еще не совсем рассуждаю как «прологист». Дело в том, что зависает именно на последнем номере в списке(если меньше - все нормально).
Смысл ведь еще и в том, чтоб числа не повторялись, т.е. формировался полный список из 10 случайных чисел.

popoff
Yuri
Июл, 2004
Сообщений: 923
popoff url://forum.message:2519

bvn,
Вы не сформулировали вопрос.

________________________________
Если не будет деревьев — нам нечем будет дышать, если вода загрязнится — нам нечего будет пить.

Внимание! Этот топик устарел. Пожалуйста, создайте новый топик, чтобы задать интересующий Вас вопрос.

Страницы: [1]
<< Новый  |  Старый >>  |  Ответ не возможен
Вход
Поиск[?]:
Программное обеспечение любой сложности
koins.com.ua