Re: Predicate ordering when using current_predicate/1

Paulo Moura <[email protected]>
Newsgroups gmane.comp.gnu.prolog.general
Message-ID <[email protected]>
On 21/11/2013, at 15:48, emacstheviking <[email protected]> wrote:

> Hi,
> 
> There is no mention of the actual order of returned predicates,

For a good reason. That's not something that you should rely upon.

> recently I created a testing framework and it has this line of code thanks to Daniel,
> 
> findall(Name,(current_predicate(Name/0), atom_concat('test_', _, Name)),AllTests)
> 
> I am writing tests now that rely upon them being executed in the order that they are defined in the source file i.e. the temporal order in which they were added to the database I presume.
> 
> However, they do not seem to come out in the expected order unless I have done something wrong but the above line of code is what dictates the order of execution.

An alternative could be to use an identifier per test that you can compare and sort. An example from the Logtalk's "ack" example unit tests:

test(ack_1) :-
	...
test(ack_2) :-
	...
test(ack_3) :-
	...

Cheers,

Paulo

-----------------------------------------------------------------
Paulo Moura
Logtalk developer

Email: <mailto:[email protected]>
Web:   <http://logtalk.org/>
-----------------------------------------------------------------
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.