:-
   use_module(library(clpr)).

:-
   use_module(library('clpqr/expand')).

:-
   expand.

:-
   consult('/projects/tambay/CobToSicstus/helper_anand').

component([],[V1,V2,I1,I2]):-
   I1 + I2  =  0.

resistor([D],[V1,V2,I1,I2,R,I]):-
   component(Cob2,[V1,V2,I1,I2]),
   R  =  D,
   V1 - V2  =  I1 * R.

battery([X],[V1,V2,I1,I2,V]):-
   component(Cob3,[V1,V2,I1,I2]),
   V1  =  X,
   V2  =  0.

componentEnd([C1,E],[C,End,V,I]):-
   C  =  C1,
   End  =  E,
   C  =  [C_V1,C_V2,C_I1,C_I2|_],
   conditional_constraint((   V  =  C_V1),(   End  =  1)),
   C  =  [C_V1,C_V2,C_I1,C_I2|_],
   conditional_constraint((   V  =  C_V2),(   End  =  2)),
   C  =  [C_V1,C_V2,C_I1,C_I2|_],
   conditional_constraint((   I  =  C_I1),(   End  =  1)),
   C  =  [C_V1,C_V2,C_I1,C_I2|_],
   conditional_constraint((   I  =  C_I2),(   End  =  2)).

node([L],[Ce,V]):-
   makearray(1,Ce),
   Ce  =  L,
   Cob4  =  0,
   cobsum2(Ce,[I,Cob5],Cob4),
   coball2(Ce,[V,Cob8]).

coball2([],[V,Cob8]).

coball2([Cob8|Tail],[V,Cob8]):-
   Cob8_V  =  V,
   Cob8  =  [Cob8_C,Cob8_End,Cob8_V,Cob8_I|_],
   ((   nonvar(Tail))->(   coball2(Tail,[V,Cob9]));(   true)).

cobsum2([],[I,Cob5],0).

cobsum2([Cob5|Tail],[I,Cob5],Cob5_I + Cob6):-
   ((   nonvar(Tail))->(   cobsum2(Tail,[I,Cob7],Cob6));(   Cob6  =  0)),
   Cob5  =  [Cob5_C,Cob5_End,Cob5_V,Cob5_I|_].

samplecircuit([X],[R12,R13,R23,R24,R34,B,Re121,Re122,Re131,Re132,Re231,Re232,Re241,Re242,Re341,Re342,Be1,Be2,N1,N2,N3,N4,Answer]):-
   makearray(1,Answer),
   resistor([10],R12),
   resistor([10],R13),
   resistor([5],R23),
   resistor([10],R24),
   resistor([5],R34),
   componentEnd([R12,1],Re121),
   componentEnd([R12,2],Re122),
   componentEnd([R13,1],Re131),
   componentEnd([R13,2],Re132),
   componentEnd([R23,1],Re231),
   componentEnd([R23,2],Re232),
   componentEnd([R24,1],Re241),
   componentEnd([R24,2],Re242),
   componentEnd([R34,1],Re341),
   componentEnd([R34,2],Re342),
   battery([10],B),
   componentEnd([B,1],Be1),
   componentEnd([B,2],Be2),
   node([[Re121,Be1,Re131]],N1),
   node([[Re122,Re241,Re231]],N2),
   node([[Re132,Re232,Re341]],N3),
   node([[Re242,Re342,Be2]],N4).

answer([X],[Answer]):-
   makearray(1,Answer),
   samplecircuit([Answer],X),
   Cob10  =  [R12,R23,R34,R24,R13],
   index(Answer,1,Cob10).

:-
   noexpand.

