Рассмотрим следующую простую программу:Переключение между ДИЗЪЮНКЦИИ в Прологе
h(n0).
h(p(A,N)) :- (A=a, h(N)) ; (A=b , h(N)).
Запрос:
1 ?- h(p(A,N)).
A = a,
N = n0 ;
A = a,
N = p(a, n0) ;
A = a,
N = p(a, p(a, n0)) ;
A = a,
N = p(a, p(a, p(a, n0))) ;
A = a,
N = p(a, p(a, p(a, p(a, n0)))) ;
...
С первого расчленено [(A=a, h(N))
] производит бесконечное количество ответов, что не могут отображать ответы, полученные второй дизъюнкцией [(A=b , h(N))
].
Возникает вопрос:
Можно ли изменить код так, что на запрос, он чередуется между решениями от первого расчленено и второго?