Re: predicate_property help.

AbdelAli ED-DBALI <[email protected]>
Newsgroups gmane.comp.gnu.prolog.general
Message-ID <[email protected]>
Amine Marref a écrit :
> 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.
> 

Hi Amine,

Try this :

| ?- functor(length([a,b],2), Functor, Arity),
Predicate_Indicator =.. ['/',Functor, Arity], 
predicate_property(Predicate_Indicator, built_in).

Arity = 2
Functor = length
Predicate_Indicator = length/2

yes

Predicate_Indicator is not an atom but must be a compound term 
'/'(Functor,Arity). That's why I use the "univ" predicate (=..) to build 
the term :

| ?- predicate_property('length/2', built_in).
uncaught exception: 
error(type_error(predicate_indicator,'length/2'),predicate_property/2)
| ?- predicate_property('/'(length,2), built_in).
yes
| ?- predicate_property(length/2, built_in).
yes

Good luck!

--
Ali ED-DBALI
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.