Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- :- use_module(library(clpfd)).
- :- use_module(library(lists)).
- :- use_module(library(time)).
- elem_at(Index, List, Elem) :-
- elem_at_inner(Index, 0, List, Elem).
- elem_at_inner(Index, Index, [Elem | _], Elem).
- elem_at_inner(Index, IndexCandidate, [_ | Rest], Elem) :-
- Index #> IndexCandidate,
- NewIndexCandidate #= IndexCandidate + 1,
- elem_at_inner(Index, NewIndexCandidate, Rest, Elem).
- lookup1(List, N, M, Elem) :-
- nth0(Index, List, Elem),
- N =< Index, Index < M.
- lookup2(List, N, M, Elem) :-
- between(N, M, Index),
- nth0(Index, List, Elem).
- lookup3(List, N, M, Elem) :-
- N #=< Index, Index #< M,
- elem_at(Index, List, Elem).
- testall :-
- length(List, 10 000),
- time(findall(E, lookup1(List, 0, 5000, E), _)), % 'naive'),
- time(findall(E, lookup2(List, 0, 5000, E), _)), % 'between'),
- time(findall(E, lookup3(List, 0, 5000, E), _)). % 'constraint').
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement