Я получил два выражения, чтобы перечислить все списки бит с помощью Пролога:Логическая эквивалентность в Прологе
bit(0).
bit(1).
bitlist1([]).
bitlist1([B|Bs]) :-
bit(B),
bitlist1(Bs).
bitlist2([]).
bitlist2([B|Bs]) :-
bitlist2(Bs),
bit(B).
Я не могу совсем понимаю, если они логически эквивалентны, и даже если они оба действительно список всех битовые списков.
Как я использую SWI-Пролог Я получил следующие результаты:
?- bitlist1(Bs).
Bs = [] ;
Bs = [0] ;
Bs = [0, 0] ;
Bs = [0, 0, 0] ;
Bs = [0, 0, 0, 0] ;
Bs = [0, 0, 0, 0, 0] ;
Bs = [0, 0, 0, 0, 0, 0] ;
Bs = [0, 0, 0, 0, 0, 0, 0] ;
Bs = [0, 0, 0, 0, 0, 0, 0, 0] ;
Bs = [0, 0, 0, 0, 0, 0, 0, 0, 0] ;
Bs = [0, 0, 0, 0, 0, 0, 0, 0, 0|...] ;
...
?- bitlist2(Bs).
Bs = [] ;
Bs = [0] ;
Bs = [1] ;
Bs = [0, 0] ;
Bs = [1, 0] ;
Bs = [0, 1] ;
Bs = [1, 1] ;
Bs = [0, 0, 0] ;
Bs = [1, 0, 0] ;
Bs = [0, 1, 0] ;
Bs = [1, 1, 0] ;
Bs = [0, 0, 1] ;
Bs = [1, 0, 1] ;
Bs = [0, 1, 1] ;
Bs = [1, 1, 1] ;
Bs = [0, 0, 0, 0] ;
...
bitlist1
начинает перечислять все разрядные списки, содержащие только нули и начинаю перечислять все остальное потом, но это на самом деле не может рассматриваться как Prolog перечисляет бесконечный поток списков бит, содержащий только нули.
bitlist2
перечисляет все комбинации 0
и 1
каждой длины, а затем продолжает список бит с длиной более высокой длины.
Таким образом, они логически эквивалентны imo, только порядок вывода списков бит отличается.
Может быть, кто-нибудь может подтвердить мою догадку или объяснить, почему два выражения не логически эквивалентны? Было бы замечательно.
Ну, это хороший момент, и из-за этого я не был уверен, являются ли они логически эквивалентными соответственно, если 'bitlist1' действительно перечисляет все битовые списки. Поэтому 'bitlist1' будет перечислять все списки бит в бесконечное время, верно? –
@SX. Нет, я не думаю, что ты прав. В рамках модели выполнения Prolog вы никогда не получите ничего, кроме нулей из bitlist1 –
Вы можете сделать это для конечных наборов ответов, но не для бесконечных. В этом примере списки могут иметь произвольную длину, поэтому сравнение наборов ответов не получается. –