Skip to content
Snippets Groups Projects
Unverified Commit f29ea787 authored by Kevin Lyda's avatar Kevin Lyda
Browse files

Debugged with SWI prolog.

parent 75ef492a
Branches
No related tags found
No related merge requests found
......@@ -59,10 +59,10 @@ var (
ratio(X, Y, Ratio) :- ratio(Y, X, Z), Ratio is 1/Z, !.
ratio(X, Y, Ratio) :-
ratio(Y, Step, R1),
ratio(Step, Z, R2),
ratio(X, Step, R1),
ratio(Step, Y, R2),
Step =\= X,
Step =\= Y,
Step =\= Z,
Ratio is R1 * R2, !.
convert(GivenQuant, GivenUnit, TargetQuant, TargetUnit) :-
......@@ -70,7 +70,6 @@ var (
unit_kind(TargetUnit, temperature),
rule(GivenQuant, GivenUnit, TargetQuant, TargetUnit).
convert(GivenQuant, GivenUnit, TargetQuant, TargetUnit) :-
write("foo"), nl,
ratio(GivenUnit, TargetUnit, Ratio),
TargetQuant is GivenQuant * Ratio, !.
`
......
unit_kind(f, temperature).
unit_kind(k, temperature).
unit_kind(c, temperature).
unit_kind(m2, area).
unit_kind(cm2, area).
unit_kind(mm, distance).
unit_kind(cm, distance).
unit_kind(m, distance).
unit_kind(km, distance).
unit_kind(feet, distance).
unit_kind(mg, mass).
unit_kind(g, mass).
unit_kind(kg, mass).
unit_kind(lb, mass).
unit_kind(cup, volume).
unit_kind(litre, volume).
unit_kind(butter, density).
unit_kind(water, density).
rule(GivenQuant, f, TargetQuant, c) :-
TargetQuant is (GivenQuant - 32) * 5 / 9.
rule(GivenQuant, c, TargetQuant, f) :-
TargetQuant is (GivenQuant / 5 * 9) + 32.
rule(GivenQuant, c, TargetQuant, k) :-
TargetQuant is GivenQuant + 273.15.
rule(GivenQuant, k, TargetQuant, c) :-
TargetQuant is GivenQuant - 273.15.
rule(GivenQuant, GivenUnit, TargetQuant, TargetUnit) :-
rule(GivenQuant, GivenUnit, X, Y),
rule(X, Y, TargetQuant, TargetUnit).
rat(m, km, 0.001).
rat(m, cm, 100).
rat(m, mm, 1000).
rat(feet, m, 0.3048).
rat(feet, inches, 12).
rat(g, mg, 1000).
rat(g, kg, 0.001).
ratio(X, Y, Ratio) :-
write("simple ratio "), write(X), write(" "), write(Y), nl,
rat(X, Y, Ratio).
ratio(X, Y, Ratio) :-
write("reverse ratio "), write(X), write(" "), write(Y), nl,
rat(Y, X, Z), !, Ratio = 1/Z.
ratio(X, Y, Ratio) :-
write("complex ratio 1 "), write(X), write(" "), write(Y), nl,
X \== Y,
rat(Step, _, _),
Step \== X,
Step \== Y,
write(" trying step "), write(Step), nl,
ratio(X, Step, R1),
ratio(Step, Y, R2),
Ratio = R1 * R2.
ratio(X, Y, Ratio) :-
write("complex ratio 2 "), write(X), write(" "), write(Y), nl,
X \== Y,
rat(_, Step, _),
Step \== X,
Step \== Y,
write(" trying step "), write(Step), nl,
write(" trying step "), write(Step), nl,
ratio(X, Step, R1),
ratio(Step, Y, R2),
Ratio = R1 * R2.
convert(GivenQuant, GivenUnit, TargetQuant, TargetUnit) :-
unit_kind(GivenUnit, temperature),
unit_kind(TargetUnit, temperature),
rule(GivenQuant, GivenUnit, TargetQuant, TargetUnit).
convert(GivenQuant, GivenUnit, TargetQuant, TargetUnit) :-
ratio(GivenUnit, TargetUnit, Ratio),
TargetQuant is GivenQuant * Ratio.
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment