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