Пролог: вернуть переменную, проверить, является ли переменная определенного типа? - PullRequest
0 голосов
/ 16 мая 2018

Я новичок в Прологе и не очень хорошо понимаю предикаты. Первый вопрос: как я могу «вернуть» определенную переменную? У нас есть alternate(?A, ?B). alternate(first, second) должен вернуть мне second, а alternate(second, first) должен вернуть first.

Второй вопрос: как проверить, является ли переменная определенного типа? У меня например ispair(?Pair). Я должен проверить, является ли Pair pos(X,Y).

1 Ответ

0 голосов
/ 16 мая 2018

Не уверен, что это то, что вы имели в виду, но как насчет следующего:

alternate(first, pair(X,_), X).
alternate(second, pair(_,X), X).

Если вы делаете запрос без каких-либо ограничений, вы получаете следующие две замены ответа:

?- alternate(X,Y,Z).
X = first,
Y = pair(Z, _5844) ; % hit ; to get the second answer
X = second,
Y = pair(_5842, Z). % variables _12345 are fresh ones created by prolog

Вы также можете спросить: на какой стороне пары (a, b) находится b?

?- alternate(Where, pair(a,b), b).
Where = second.

В случае, если ваша пара (b, b), вы получаете два решения:

?- alternate(Where, pair(b,b), b).
Where = first ;
Where = second.

Кроме того, c не является частью пары (a, b):

?- alternate(Where, pair(a,b), c).
false.

Если вы настаиваете на выборе элемента с небес, вы получите «нет» в качестве ответа:

?- alternate(heaven, X, Y).
false.

Когда вы знаете, что первым элементом пары является a, пролог скажет вам, как должна выглядеть пара:

?- alternate(first, X, a).
X = pair(a, _5680).

Снова у нас есть свежая переменная (_5680), потому что любой второй член в порядке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...