/ / Semantyka operacyjna w prolog - prolog

Semantyka operacyjna w prologu - prologu

Moje pytanie jest dość proste i rozumiemco muszę zrobić, ale wydaje się, że nie mogę reprezentować mojego zrozumienia Jak pisać predykaty do definiowania bramek takich jak XOR lub NOR w kategoriach reguł bramki NAND?

na przykład :

nand(t,t,f).
nand(t,f,t).
nand(f,t,t).
nand(f,f,t).

Powyżej znajduje się tabela prawdy dla nand gate. Teraz, jeśli chcę zdefiniować bramkę XOR, używając powyższych terminów w Prologu, na przykład muszę zapytać Prologa o XOR (X, Y, Z), dałoby mi to trzy możliwe odpowiedzi, jak powinienem zbudować predykat, żeby go zdefiniować?

Dziękuję Ci

Odpowiedzi:

2 dla odpowiedzi № 1

Trudną częścią jest wymyślenie wyrażenia w kategoriach nand bramy. Powiedzmy, że ufamy to pytanie: rozwiązaniem może być wtedy

xor(A,B,C) :-
nand(A,B,O1),
nand(A,O1,O21),
nand(B,O1,O22),
nand(O21,O22,C).

test:

?- setof(X/Y/Z,xor(X,Y,Z),L).
L = [f/f/f, f/t/t, t/f/t, t/t/f].