2011-07-13 15 views
7

Jak napisać poniżej w Prologu?Jak napisać "a implikuje b lub c" w Prologu

a -> b V c 

W języku angielskim, które byłyby a implies that b or c (or both)

+0

Czy używam złego terminu? Odpowiedzi wydają się mówić, że implikacja nie jest właściwym terminem. Czy nie wszystkie (najbardziej) klauzule prologu są czytane, ponieważ coś implikuje coś innego ('something_else:-something")? Nie uczę się angielskiego w Prologu, więc mogę używać niewłaściwego terminu. – baruch

Odpowiedz

6

Klauzula

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

nie jest to warunek Horn, a tym samym nie może być reprezentowany w (czysty) startowych (patrz np Wikipedia). Z drugiej strony (b ; c) => a jest klauzulą ​​Horn i oczywiście może być reprezentowana przez dwie reguły Prolog.

+0

Nie jestem zaznajomiony z ';'. Czy możesz wyjaśnić, co to jest i co oznaczają te dwie klauzule? – baruch

+0

Użyłem ';' do reprezentowania 'lub' (= disjunction), tj. Twojego symbolu 'v'. Wybrałem to, ponieważ jest to predefiniowany operator "lub" u wielu tłumaczy Prolog. Więc możesz napisać 'a: - b; c., Co oznacza' (b lub c) implikuje a'. Nie możesz wyrazić "a implikuje (b lub c)". – Jiri

0

Logicznie rzecz biorąc, „b lub c” to to samo, co „b lub c (lub oba)”

Możesz przeczytać operatorzy o logicznych w Prologu tutaj: http://rigaux.org/language-study/syntax-across-languages-per-language/Prolog.html

Czy możesz wyjaśnić nieco więcej, proszę, co próbujesz zrobić z "sugeruje"?

+0

Mam na myśli jak "a: -b, c." Oznacza "b and c implikuje a", ale w inny sposób. Nieoficjalnie byłoby to "b, c: -a." – baruch

+0

Jeśli potem zapytam "? -b" lub "? -c", powinienem otrzymać fałszywą, nieskomplikowaną lub somesuch, ale jeśli mam również 'd: -b. d: -C#, a następnie '? -d. 'powinno być prawdziwe. – baruch

+0

Możesz napisać dwie klauzule: b: - a. c: - a. –

1

Nie jestem całkowicie pewien, co chcesz zrobić z tym implikuje oświadczenie. Ale pomyślałbym, że wystarczyłoby poniższe (pamiętaj, że to SICStus nie swi, ale na tym niskim poziomie myślę, że to wszystko to samo).

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

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

?- predicate(x, Then). 
no 

Można zrobić bardziej skomplikowane kontrole w celu upewnij się, że nigdy nie jest wartością niezwiązany (aby zapobiec predicate(If, b). Jest prawdziwe), ale jeśli robisz ogromne zastosowanie wówczas jestem pewien dobra dokumentacja wystarczy.

Powiązane problemy