more updates to meld.

This commit is contained in:
Vitor Santos Costa 2011-05-11 09:28:40 +01:00
parent bbf83cb34d
commit 7122c657c0
5 changed files with 58 additions and 22 deletions

View File

@ -0,0 +1,7 @@
%edge(0,1).
%edge(0,4).
%edge(1,4).
%edge(1,2).
edge(2,3).
edge(2,4).
edge(3,4).

View File

@ -1,20 +1,24 @@
type rank(node, int, float).
type reachable(node, node).
type calcRank(node, int, sum float).
type persistent numPages(node, int).
% type persistent numPages(node, int).
type persistent numPages(node, sum int).
type numLinks(node, sum int).
type path(node, node).
const damping = 0.85.
const num_iterations = 4.
% extern float to_float(int).
% extern float float_abs(float).
rank(A, 0, 1.0 / to_float(T)) :- numPages(A, T).
rank(A, 0, 1.0 / to_float(T)) :- numPages(A,T).
rank(A, I, V) :-
numPages(A, Ps),
calcRank(A, I, T),
Before = I - 1,
rank(A, Before, VOld),
V = damping + (1.0 - damping) * T,
V = (damping + (1.0 - damping) * T)/to_float(Ps),
I =< num_iterations.
% //float_abs((damping + (1.0 - damping) * T) - VOld) > 0.001.
@ -27,8 +31,17 @@ calcRank(A, I + 1, O / to_float(C)) :-
numLinks(A, 1) :-
edge(A,B).
numPages(A, 1) :-
numPages(A, 1) :- path(A,_).
path(A, B) :-
edge(A,B).
path(A, B) :-
edge(B,A).
path(A, B) :-
edge(A,C),
path(C,B).
path(A, B) :-
edge(C,A),
path(C,B).

View File

@ -186,8 +186,8 @@ compile_goal((forall G then Do), Goals, Gs, Head) :- !,
listtobody(BLF2, Body),
listtobody(DelBLF2, DelBody),
% done
assert(meld_program:(run(NG) :- Body)),
assert(meld_program:(run(delete(DelNG)) :- DelBody)).
assert_static(meld_program:(run(NG) :- Body)),
assert_static(meld_program:(run(delete(DelNG)) :- DelBody)).
compile_goal(Goal, Goals, Gs, Head) :-
collect_body(Gs, Goals, BLF, BL1),
copy_term(h(Head,BLF,BL1,Goal), h(Head,DelBLF,DelBL1,DelGoal)),
@ -198,8 +198,8 @@ compile_goal(Goal, Goals, Gs, Head) :-
reorder_builtins(DelGoal, DelBLF, DelBLF2),
listtobody(BLF2, Body),
listtobody(DelBLF2, DelBody),
assert(meld_program:(run(Goal) :- Body)),
assert(meld_program:(run(deleted(DelGoal)) :- DelBody)).
assert_static(meld_program:(run(Goal) :- Body)),
assert_static(meld_program:(run(deleted(DelGoal)) :- DelBody)).
% quantified variables should not leave the scope of the forall.
quantified_vars(G,Extern,NG) :-

View File

@ -23,7 +23,8 @@
[
nb_queue/1,
nb_queue_enqueue/2,
nb_queue_dequeue/2
nb_queue_dequeue/2,
nb_queue_replace/3
]).
@ -35,7 +36,7 @@
live :-
repeat,
( pop(Goal) ->
format('-~w~n',[Goal]),
% format('<- ~w~n',[Goal]),
run(Goal),
fail
;
@ -50,6 +51,7 @@ done :-
done :-
current_predicate(meld_program:P),
P \= run/1,
P \= trace/2,
% P \= neighbor/2,
% P \= root/1,
listing(meld_program:P),
@ -58,9 +60,18 @@ done.
delete(Fact) :-
once(retract(meld_program:Fact)),
nb_getval(meld_queue, Queue),
retract(meld_program:Fact),
nb_queue_enqueue(Queue, deleted(Fact)).
(
% nb:nb_queue_show(Queue, L ), writeln(show:Fact:L),
nb_queue_replace(Queue, Fact, [] ),
% format('R ~w~n', [Fact]),
deleted(Fact)
->
true
;
nb_queue_enqueue(Queue, deleted(Fact))
).
pop(Goal) :-
nb_getval(meld_queue, Queue),
@ -72,10 +83,12 @@ push(Goal) :-
increase_reference_count(Ref),
fail.
push(Goal) :-
format('+~w~n',[Goal]),
% format('-> ~w~n',[Goal]),
nb_getval(meld_queue, Queue), !,
assert(meld_program:Goal),
nb_queue_enqueue(Queue, Goal).
nb_queue_enqueue(Queue, Goal),
% nb:nb_queue_show(Queue, L ), writeln(show:Goal:L),
fail.
% create a queue
@ -118,16 +131,17 @@ sum(Skel,Arg,Goal) :-
copy_term(Skel, NGoal),
meld_program:Skel, !,
arg(Arg, Skel, A0),
delete(Skel),
arg(Arg, Goal, A),
AN is A0+A,
AN \= A0,
delete(Skel),
arg(Arg, NGoal, AN),
format('S ~w~n',[Goal]),
% format('S ~w~n',[NGoal-Skel]),
push(NGoal).
sum(_Skel,_Arg,Goal) :-
format('S ~w~n',[Goal]),
assert(meld_program:Goal),
fail.
% format('S ~w~n',[Goal]),
push(Goal).
clean(Skel) :-
% format('D~w~n',[Skel]),
@ -239,11 +253,12 @@ delete_from_max(Goal) :-
delete_from_sum(Skel,Arg,Goal) :-
copy_term(Skel, NGoal),
meld_program:Skel,
once(meld_program:Skel),
arg(Arg, Skel, A0),
delete(Skel),
arg(Arg, Goal, A),
AN is A0-A,
AN \= A0,
delete(Skel),
arg(Arg, NGoal, AN),
push(NGoal).

View File

@ -21,3 +21,4 @@ trace(A,B) :- !,
trace.
run([]) :- fail.