:- use_module(library(clpr)).

% Schaltkreisanalyse:

% Schaltkreise als Prolog-Terme:
% wider(Ohm)
% parallel(S1,S2)
% reihe(S1,S2)
%
% z.B.: reihe(parallel(wider(270),wider(470)), wider(180))

% sk(SK,V,I): Spannung V Volt am Schaltkreis SK: Stromdruchfluss I Ampere

% Ohmsches Gesetz:
sk(wider(O),V,A) :- { V = O * A }.

% Parallelschaltung: Kirchhoffsche Gesetz
sk(parallel(S1,S2),V,A) :-
        { A = A1+A2, V = V1, V = V2 },
        sk(S1,V1,A1),
        sk(S2,V2,A2).

% Reihenschaltung: Kirchhoffsche Gesetz
sk(reihe(S1,S2),V,A) :-
        { V = V1+V2, A = A1, A = A2 },
        sk(S1,V1,A1),
        sk(S2,V2,A2).

% ?- sk(reihe(parallel(wider(270),wider(470)), wider(180)),5,A).
% A = 0.014225297962322182 ? 
% yes
% ?- sk(reihe(parallel(wider(270),wider(470)), wider(180)),V,0.1).
% V = 35.14864864864865 ? 
% yes
% ?- sk(reihe(wider(R),reihe(wider(R),wider(R))), V, 5).
% {R=0.06666666666666667*V} ?
