Выбрать/2 несколько ответов sw prolog

как я могу определить выбор/2, чтобы дать бесконечные ответы

  choose(List, Elt) :-
    length(List, Length),
    random(0, Length, Rand),
    nth1(Rand, List, Elt).

мой выбор/2 дает только один ответ

Примеры:

?- choose([1,2,3],Elt).
Elt = 1;
Elt = 1;
Elt = 3;
...

person user597670    schedule 01.02.2011    source источник


Ответы (2)


Простой: добавить как второе предложение

choose(List, E) :- choose(List, E).

к вашей программе. Кстати, вы, кажется, хотите nth0/3 вместо nth1/3. И лучшее, более декларативное имя вместо «выбрать/2», например, «список_выбор/2».

person mat    schedule 01.02.2011

Попробуйте использовать повтор:

choose(L, O) :- repeat, member(O, L).

он будет возвращаться ко всем элементам списка, а затем повторение заставит его снова попробовать все эти элементы.

?- choose([1,2,3],Out). Out = 1 ; Out = 2 ; Out = 3 ; Out = 1 ; Out = 2 ; Out = 3 ;

person DaveEdelstein    schedule 01.02.2011