Показать сообщение отдельно
  (#1 (permalink)) Старый
imported_Black_Dragon imported_Black_Dragon вне форума
Member
 
Сообщений: 17
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 10.10.2005
По умолчанию Центральный цикл (рекурсия) или перевычисляемый предикат - 14.10.2005, 10:46

Есть предикат (running), который из начального списка чисел строит другой список, используя генератор случайных чисел.
Надо по ентр-у в цикле по новой генерить список и показывать.

1. Вариант:
Код:
        start() :-
            Numb=maximum-minimum,
            initlist(Numb,List0s),
            running(count,0.35,10,List0s,List1s),
            console::clearOutput(),
            console::write(List1s),console::nl,
            dwritel(List1s).
            'q' = console::readchar(),!.
        start() :- start().
Все работает, но меня смущает, что чем долшье работает, тем дальше в стек погружаемся... (жрем ресурсы)

Решил по другому сделать, методом возврата
2. Вариант:
Код:
        work() :-
            Numb=maximum-minimum,
            initlist(Numb,List0s),!,
            running(count,0.35,10,List0s,List1s),
            console::clearOutput(),
            console::write(List1s),console::nl,
            dwritel(List1s),
            'q' = console::readchar().
        start() :- work(),!.
        start().
Код:
running : (integer,real,integer,rlist,rlist) nondeterm (i,i,i,i,o).
work: () nondeterm.
Работает только один раз!!!, это означает что running при возврате не пересчитывается или сие не возможно?
Код:
        running(0,_,_,Xs,Xs).
        running(Numcount,Proc,Kv,Xs,X1s) :-
            Numcount>0,
            Res = formul0(Proc,Kv),
            setnum(Res,Xs,1,X2s),
            Numcount1 = Numcount-1,
            running(Numcount1,Proc,Kv,X2s,X1s).
Ответить с цитированием
Ads