users-prolog
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

predicate_property help.


From: Amine Marref
Subject: predicate_property help.
Date: Tue, 02 Oct 2007 15:20:03 +0100
User-agent: Thunderbird 1.5.0.13 (Windows/20070809)

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




reply via email to

[Prev in Thread] Current Thread [Next in Thread]