Skip to content

Instantly share code, notes, and snippets.

@sudowork
Last active December 12, 2015 04:29
Show Gist options
  • Save sudowork/4715109 to your computer and use it in GitHub Desktop.
Save sudowork/4715109 to your computer and use it in GitHub Desktop.
/*************
Inverter
_______
| |
A-| NOT |-OUT
|_____|
*************/
% A OUT
not(0, 1 ).
not(1, 0 ).
/*************
AND Gate
_______
A-| |
| AND |-OUT
B-|_____|
*************/
% A B OUT
and(0, 0, 0 ).
and(0, 1, 0 ).
and(1, 0, 0 ).
and(1, 1, 1 ).
/*************
OR Gate
______
A-| |
| OR |-OUT
B-|____|
*************/
% A B OUT
or(0, 0, 0 ).
or(0, 1, 1 ).
or(1, 0, 1 ).
or(1, 1, 1 ).
/*************
XOR Gate
_______
A-| |
| XOR |-OUT
B-|_____|
*************/
% A B OUT
xor(0, 0, 0 ).
xor(0, 1, 1 ).
xor(1, 0, 1 ).
xor(1, 1, 0 ).
/*************
Half-Adder
_______
A---o-| |
| | XOR |--S
B-o---|_____|
| | _______
| |-| |
| | AND |--C
|---|_____|
*************/
half_adder(A, B, C, S) :-
xor(A, B, S),
and(A, B, C).
/*************
Full-Adder
http://upload.wikimedia.org/wikipedia/commons/thumb/a/aa/Full_Adder.svg/400px-Full_Adder.svg.png
*************/
full_adder(A, B, Cin, Cout, S) :-
half_adder(A, B, C1, S1),
half_adder(Cin, S1, C2, S),
or(C1, C2, Cout).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment