Snippets of my code are shown below. After doing a lot of cumbersome tracing, I have reached a point where I think it's the external modules which are the source of my problem, as the findall
in links_of_actor
never gets called, but links_of_actor
itself gets called. I would be very grateful to anyone who can help and can clarify/add more of my code to this question if needed.
find_identity(A) :-
all_actor_links(ALs),
find_identity(ALs,[],A).
find_identity([a(A,_)],_,A).
find_identity(ALs,Ms,A) :-
agent_ask_oracle(oscar,o(1),link,L),
( memberchk(L,Ms) -> find_identity(ALs,Ms,A)
; otherwise -> purge_actors(ALs,L,NewALs),
find_identity(NewALs,[L|Ms],A)
).
links_of_actor(A,Ls) :-
actor(A),
wp(A,WT),
findall(L,wt_link(WT,L),Ls1),
findall(L,link(L),Ls2),
intersection(Ls1,Ls2,Ls).
actor_links(A,a(A,Ls)) :-
links_of_actor(A,Ls).
all_actor_links(ALs) :-
findall(A,actor(A),As),
maplist(actor_links,As,ALs).
----------------------------------------------------- Support Functions ---------------------------------------------------
% wp(Q,WT) <- issue query Q to Wikipedia and return the page in wikitext format
wp(Q,WT):-
wp_cache(Q,WT),!.
wp(Q,WT):-
wp_query2URL(Q,URL),
http_get(URL,R,[]),
atom_json_term(R,RR,[]),
wt_get(RR,WT0),
( atomic_list_concat1(_L,'#REDIRECT',WT0) -> wt_link(WT0,QQ),wp(QQ,WT)
; otherwise -> WT=WT0
),
assert(wp_cache(Q,WT)).
------------------------------------------------------------ Edit ----------------------------------------------------------------
After using the guitracer
that is available with prolog, I have found that the program fails at http_get(URL,R,[])
in the wp(Q,WT)
predicate. However, I am still not sure as to why this isn't working - Could it be possibly because of my internet?
To clarify, the predicate actor is defined in my file: actor('Billy Bob Thornton').
etc. and so are the links : link('Barack Obama').
.