predicate_property help.

Amine Marref <[email protected]>
Newsgroups gmane.comp.gnu.prolog.general
Message-ID <[email protected]>
Hi,

I use a meta-interpreter in my program. The meta-interpreter needs to 
check whether a particular predicate is built-in or user-defined to 
perform an iterative deepening DFS.
.....
solve(A,_,_):-
  predicate_property(A, built_in), 
  !,
  call(A).
solve(A,D,Limit):-
  predicate_property(A, user),
  clause(A,B),
  D1 is D+1,
  solve(B,D1,Limit).
....

The above code works with Sicstus for instance. However, GNU Prolog 
needs A to be a  predicate indicator e.g. length/2 and not a goal.
so:

| ?- predicate_property(length/2, built_in).

yes
| ?- predicate_property(length([a,b],2), built_in).
uncaught exception: 
error(type_error(predicate_indicator,length([a,b],2)),predicate_property/2)

My question is then: how do I go from the goal length([a,b],2) to the 
predicate indicator length/2?

The best I could do was:

| ?- functor(length([a,b],2), Functor, Arity), 
atom_concat(Functor,/,Temp), number_atom(Arity, Arity1), 
atom_concat(Temp, Arity1, Predicate_Indicator).

Arity = 2
Arity1 = '2'
Functor = length
Predicate_Indicator = 'length/2'
Temp = 'length/'

yes

However, 'length/2' does not work as first argument to predicate_property.

Any help?

Amine.

-- 
Amine Marref
PhD Research Student
Real-Time Systems Group
Department of Computer Science
The University of York
Heslington
YO10 5DD
York
United Kingdom

+44 1904 432810
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.