/* Full Adder in Picat. This Picat model was created by Hakan Kjellerstrand, hakank@gmail.com See also my Picat page: http://www.hakank.org/picat/ */ import cp. main => go. go ?=> L = [I1,I2,I3,O1,O2], L :: 0..1, I3 #= 0, O2 #= 1, fullAdder(I1,I2,I3,O1,O2), Vars = [I1,I2,I3,O1,O2], solve(Vars), println([i1=I1,i2=I2,i3=I3,o1=O1,o2=O2]), fail, nl. go => true. fullAdder(I1,I2,I3,O1,O2) => [X1,Y1,Y2] :: 0..1, X1 #= (I1 #^ I2), Y1 #= (I1 #/\ I2), O1 #= (X1 #^ I3), Y2 #= (I3 #/\ X1), O2 #= (Y1 #\/ Y2).