オームの法則の計算
I:電流. E:電圧. R:抵抗.
3つの変数の内2つがわかれば、残りの1つが計算される
♪ プログラムコード code
% cat ohm_prolog.pl ohm_IER( I, E, R ):- number(I), number(E), number(R), I =:= E / R, E =:= I * R, R =:= E / I. ohm_IER( I, E, R ):- var(I), number(E), number(R), I is E / R. ohm_IER( I, E, R ):- var(E), number(I), number(R), E is I * R. ohm_IER( I, E, R ):- var(R), number(E), number(I), R is E / I. serial( [], 0). serial( [Ra|Rz], R ):- serial( Rz, R1 ), R is Ra + R1. parallel( A, R ):- ppp( A, B ), R is 1/B. ppp( [], 0 ). ppp( [A|B], R ) :- ppp( B, R1 ), R is 1/A + R1.
実行例
mugenkai:uema% swipl -qs ohm_prolog.pl [~/ドキュメント/ohm_prolog] ?- ohm_IER( 0.02, 2, R ). R = 100.0. ?- ohm_IER( 0.02, E, 100 ). E = 2.0 ; false. ?- ohm_IER( I, 2, 100 ). I = 0.02 ; false. ?- ohm_IER( 0.02, 2, 100 ). true ; false. ?- serial( [50,50], R ). R = 100. ?- serial( [50,50], R ), ohm_IER( I, 2, R ). R = 100, I = 0.02 ; false. ?- parallel( [200, 200], R ). R = 100.0. ?- parallel( [200, 200], R ), ohm_IER( 0.02, E, R ). R = 100.0, E = 2.0 . ?- parallel( [200,200], A ), parallel( [200,200], B ), serial( [A,B],R ). A = B, B = 100.0, R = 200.0. ?-