users-prolog
[Top][All Lists]
Advanced

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

Re: Predicate ordering when using current_predicate/1


From: Sean Charles
Subject: Re: Predicate ordering when using current_predicate/1
Date: Fri, 22 Nov 2013 22:43:38 +0000

Danieal,

Mission accomplished!

I ran with what you gave me and I now have a process that executes tests in the same order as they are declared in the source text. I had to learn (very quickly) about the A-B pair notation, something I had not seen before but as with the predicate indicator thing, once you know how it works the rest is easy…easier.

Here’s what I ended up with:
run_tests :-
        get_all_tests(AllTests),
        keysort(AllTests, SortedTests),
        maplist(exec_test, SortedTests),

The get_all_tests/1 predicate and the supporting acts look like this:
get_all_tests(Tests) :-
setof(Line-Name, get_one_test(Name, Line), Tests).


get_one_test(Name, Line) :-
current_predicate(Name/0),
atom_concat('test_', _, Name),
predicate_property(Name, prolog_line(Line)).


exec_test(_-TestFunction) :- /* omitted for brevity! */

Essentially I get all the test_ predicates then keysort/2 them into line number order and then maplist/2 over the exec_test/1 function which is now modified to accept a pair. Damn that’s useful to know!

So, once again, thank you very mud for your support in helping me out.

I am going to try to finish my Redis tests over the weekend and then I am going to update my “main” project with this improved code. in fact, I might even create a little github project and then include it as a dependency or something like that later on.

Have a great weekend!
:)
Sean.





reply via email to

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