34
35:- module(mapilist,
36 [mapilist/3,
37 mapilist/4,
38 mapilist/5,
39 mapilist/6,
40 mapilist/7,
41 mapilist/8]). 42
43:- meta_predicate
44 mapilist(2, +, ?),
45 mapilist(3, +, ?, ?),
46 mapilist(4, +, ?, ?, ?),
47 mapilist(5, +, ?, ?, ?, ?),
48 mapilist(6, +, ?, ?, ?, ?, ?),
49 mapilist(7, +, ?, ?, ?, ?, ?, ?). 50
51mapilist(Goal, I1, List) :-
52 mapilist_(List, I1, Goal).
53
54mapilist_([], _, _).
55mapilist_([Elem|Tail], I1, Goal) :-
56 call(Goal, I1, Elem),
57 succ(I1, I),
58 mapilist_(Tail, I, Goal).
59
60mapilist(Goal, I1, List1, List2) :-
61 mapilist_(List1, List2, I1, Goal).
62
63mapilist_([], [], _, _).
64mapilist_([Elem1|Tail1], [Elem2|Tail2], I1, Goal) :-
65 call(Goal, I1, Elem1, Elem2),
66 succ(I1, I),
67 mapilist_(Tail1, Tail2, I, Goal).
68
69mapilist(Goal, I, List1, List2, List3) :-
70 mapilist_(List1, List2, List3, I, Goal).
71
72mapilist_([], [], [], _, _).
73mapilist_([Elem1|Tail1], [Elem2|Tail2], [Elem3|Tail3], I1, Goal) :-
74 call(Goal, I1, Elem1, Elem2, Elem3),
75 succ(I1, I),
76 mapilist_(Tail1, Tail2, Tail3, I, Goal).
77
78mapilist(Goal, I, List1, List2, List3, List4) :-
79 mapilist_(List1, List2, List3, List4, I, Goal).
80
81mapilist_([], [], [], [], _, _).
82mapilist_([Elem1|Tail1], [Elem2|Tail2], [Elem3|Tail3], [Elem4|Tail4], I1, Goal) :-
83 call(Goal, I1, Elem1, Elem2, Elem3, Elem4),
84 succ(I1, I),
85 mapilist_(Tail1, Tail2, Tail3, Tail4, I, Goal).
86
87mapilist(Goal, I, List1, List2, List3, List4, List5) :-
88 mapilist_(List1, List2, List3, List4, List5, I, Goal).
89
90mapilist_([], [], [], [], [], _, _).
91mapilist_([Elem1|Tail1], [Elem2|Tail2], [Elem3|Tail3], [Elem4|Tail4], [Elem5|Tail5], I1, Goal) :-
92 call(Goal, I1, Elem1, Elem2, Elem3, Elem4, Elem5),
93 succ(I1, I),
94 mapilist_(Tail1, Tail2, Tail3, Tail4, Tail5, I, Goal).
95
96mapilist(Goal, I, List1, List2, List3, List4, List5, List6) :-
97 mapilist_(List1, List2, List3, List4, List5, List6, I, Goal).
98
99mapilist_([], [], [], [], [], [], _, _).
100mapilist_([Elem1|Tail1], [Elem2|Tail2], [Elem3|Tail3], [Elem4|Tail4], [Elem5|Tail5], [Elem6|Tail6], I1, Goal) :-
101 call(Goal, I1, Elem1, Elem2, Elem3, Elem4, Elem5, Elem6),
102 succ(I1, I),
103 mapilist_(Tail1, Tail2, Tail3, Tail4, Tail5, Tail6, I, Goal)