Unifiable Условия Пролога - PullRequest
       33

Unifiable Условия Пролога

2 голосов
/ 24 января 2012

Являются ли два термина [a, b, c, d, e] и [[X] | [b, c, d, e]] unifiable? Мне нужно подтверждение, я думаю, что нет, потому что вы не можете получить [X] = a в любом случае?

Ответы [ 3 ]

3 голосов
/ 24 января 2012

Ваше предположение верно: [X], что мы можем переписать, поскольку .(X,[]) нельзя объединить с атомом a.

Мы можем переписать [X|[b,c,d,e]] как .(_G231,.(b,.(c,.(d,.(e,[]))))), т.е. [X,a,b,c,d,e].

Вы можете просмотреть форму без сахара синтаксиса, используя display / 1.

2 голосов
/ 24 января 2012

Я думаю, вам нужно объединиться с [X | [b,c,d,e]], а не [[X] | [b,c,d,e]], т.е. вы можете получить X=a, а не [X]=a.

1 голос
/ 24 января 2012

если X по какой-либо причине необходимо включить в список, вы не сможете использовать эту унификацию (как описано в chac). но вы можете использовать предикат добавления, чтобы получить соответствие:

?- append([X], [b,c,d,e], [a,b,c,d,e]).
X = a 
...