1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| modifie(In, Out) :-
modifie(In, [], Out, _).
%
modifie(In, LstArgs, Out, LstArgs1) :-
In =..[Fonc|Args],
modifie_1(Args, LstArgs, [], Res, LstArgs1),
Out =.. [Fonc| Res].
modifie_1([], Lst, R, RV, Lst) :-
reverse(R, RV).
modifie_1([H | T], LstArgs, Tmp, Res, LstArgs1) :-
functor(H, _, 0),
( member([H, X], LstArgs)
-> modifie_1(T, LstArgs, [X | Tmp], Res, LstArgs1)
; modifie_1(T, [[H, X]| LstArgs], [X | Tmp], Res, LstArgs1)).
modifie_1([H | T], LstArgs, Tmp, Res, LstArgs1) :-
functor(H, _, N),
N > 0,
modifie(H, LstArgs, Out, LstArgsTmp),
modifie_1(T, LstArgsTmp, [Out|Tmp], Res, LstArgs1). |
Partager