root/tags/lgt2311/library/meta.lgt

Revision 3011, 0.8 KB (checked in by pmoura, 2 years ago)

The metapredicate/1 directive should be considered deprecated. Use the meta_predicate/1 directive instead.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
Line 
1
2:- object(meta,
3    implements(metap)).
4
5    :- info([
6        version is 2.0,
7        date is 2006/9/17,
8        author is 'Paulo Moura',
9        comment is 'Some useful meta-predicates.']).
10
11    callable(Term) :-
12        nonvar(Term),
13        functor(Term, Functor, _),
14        atom(Functor).
15
16    :- meta_predicate(filter(1, *, *)).
17    filter(_, [], []) :- !.
18    filter(Closure, [Arg| Args], List) :-
19        (   call(Closure, Arg) ->
20            List = [Arg| Args2]
21        ;   List = Args2
22        ),
23        filter(Closure, Args, Args2).
24
25    :- meta_predicate(ignore(::)).
26    ignore(Goal) :-
27        (   call(Goal) ->
28            true
29        ;   true
30        ).
31
32    :- meta_predicate(map(2, *, *)).
33    map(_, [], []).
34    map(Closure, [Old| Olds], [New| News]) :-
35        call(Closure, Old, New),
36        map(Closure, Olds, News).
37
38    :- meta_predicate(succeeds(1, *)).
39    succeeds(_, []).
40    succeeds(Closure, [Head| Tail]) :-
41        call(Closure, Head),
42        succeeds(Closure, Tail).
43
44:- end_object.
Note: See TracBrowser for help on using the browser.