|
|
|
abstype ezVector
with newV :: posint -> real -> ezVector
elem :: ezVector -> posint -> real
add :: ezVector -> ezVector -> ezVector
mul :: real -> ezVector -> ezVector
ezVector == [real]
newV 1 r = [r]
newV (n+1) r = 0:(newV n r)
elem [] n = 0
elem (h:t) 1 = h
elem (h:t) i = elem t (i-1)
add [] v = v
add v [] = v
add (r1:v1) (r2:v2) = (r1+r2):(add v1 v2)
mul k [] = []
mul k (r:v) = (k*r):(mul k v)
evaluate([], _).
evaluate([G|Gs], KB) :- list(G),
evaluate(G, KB),
evaluate(Gs, KB).
evaluate([G|Gs], KB) :- goal(G),
expand(G, KB, SubGs),
add(SubGs, Gs, NewGs),
evaluate(NewGs, KB).