Как написать «а подразумевает б или в» в прологе - PullRequest
7 голосов
/ 14 июля 2011

Как бы я написал следующее на прологе?

a -> b V c

На английском языке это будет a implies that b or c (or both)

Ответы [ 3 ]

6 голосов
/ 14 июля 2011

пункт

a => (b ; c)     % ';' means 'or'

не является клаузулой Рога, и поэтому не может быть представлено в (чистом) прологе (см., Например, Wikipedia ). С другой стороны, (b ; c) => a является предложением Хорна и, очевидно, может быть представлено двумя правилами Пролога.

1 голос
/ 14 июля 2011

Я не совсем уверен, что вы хотите сделать с этим утверждением.Но я бы подумал, что следующего будет достаточно (имейте в виду, что это SICStus, а не swi, но на этом низком уровне я думаю, что все то же самое).

predicate(a, b).
predicate(a, c).

?- predicate(a, Then).
Then = b ;
Then = c ;
no

?- predicate(x, Then).
no

Вы могли бы сделать более сложные проверки, чтобы убедиться, чтоa никогда не является несвязанным значением (чтобы не было predicate(If, b). истинным), но если вы не делаете огромное приложение, то я уверен, что хорошей документации будет достаточно.

0 голосов
/ 14 июля 2011

Логически, «b или c» - это то же самое, что и «b или c (или оба)» *

Вы можете прочитать о логических операторах в Прологе здесь: http://rigaux.org/language-study/syntax-across-languages-per-language/Prolog.html

МожетВы объясните немного больше, пожалуйста, что вы пытаетесь сделать с «подразумевает»?

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