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 № 1Trudną 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].