Czy są jakieś implementacje prolog, które są w stanie wyliczyć wszystkie elementy niezliczonych wyników?Prolog: Wyliczyć wszystkie elementy niezmiernie nieskończonych wyników
Rozważmy wyliczenie wszystkich par liczb naturalnych. Jeśli wymieniamy pary w kolejności {(0,0), (0,1), (1,0), (0,2), (1,1), (2,0), ...}, możemy może wyliczyć wszystkie pary. Jednakże, jeśli wyliczymy pary w kolejności {(0,0), (0,1), (0,2), (0,3) ...} jako następujący program prologu GNU, nigdy nie osiągniemy par takich jak (1,1).
% cat nats.pl
nat(0).
nat(X1) :- nat(X), X1 is X + 1.
pair_of_nats(X, Y) :- nat(X), nat(Y).
% prolog
GNU Prolog 1.3.0
By Daniel Diaz
Copyright (C) 1999-2007 Daniel Diaz
| ?- ['nats.pl'].
compiling /home/egi/prolog/nats.pl for byte code...
/home/egi/prolog/nats.pl compiled, 4 lines read - 762 bytes written, 9 ms
yes
| ?- pair_of_nats(X,Y).
X = 0
Y = 0 ? ;
X = 0
Y = 1 ? ;
X = 0
Y = 2 ? ;
X = 0
Y = 3 ?
Dzięki! Czy są jakieś implementacje, które możemy skonfigurować algorytm wyszukiwania od pierwszego dogłębnego wyszukiwania do pierwszego wyszukiwania w skali? Sądzę, że w niektórych przypadkach bardzo przydatne jest pierwsze wyszukiwanie, a przepisanie programu do pierwszego wyszukiwania sprawia, że program jest nieporządny. – egi
Istnieją uzasadnione powody, dla których domyślną strategią jest głębia. Rozwiązania, których szukasz, nie są uporządkowane w jakiejś banalnej kolejności, więc rozsądnie jest oczekiwać, że będziesz musiał opisać w swoim programie, do czego dokładnie dążysz. –
Dotychczasowe odpowiedzi są miłe z punktu widzenia generowania par liczb naturalnych, ale bardziej ogólny problem, jak sądzę, zostanie zahamowany przez strategię wyszukiwania Prologu, jak to podkreślił @Boris.Jeśli masz dwa (lub więcej) arbitralne predykaty, 'p1' i' p2', które generują nieskończoną serię rozwiązań, nie jestem pewien, czy w Prologu istnieje sposób na zbadanie ich rozwiązań w połączeniu, najpierw szerokość , chyba że mają wyraźne powiązanie z liczbami naturalnymi (* np. *, 'p1 (N, ...)', 'p2 (N, ...)'), w którym to przypadku metoda liczby naturalnej może być wykorzystana do ograniczenia wyniki na backtrackingu. – lurker