1:- module(bc_walk, [
2 bc_walk/3
3]).
7:- meta_predicate(bc_walk(2, *, *)).
14
15bc_walk(Handler, In, Out):-
16 call(Handler, In, Out), !.
17
18bc_walk(Handler, In, Out):-
19 is_list(In), !,
20 walk_list(In, Handler, Out).
21
22bc_walk(Handler, In, Out):-
23 compound(In), !,
24 In =.. [Name|Args],
25 length(Args, Len),
26 length(ArgsWalked, Len),
27 Out =.. [Name|ArgsWalked],
28 walk_list(Args, Handler, ArgsWalked).
29
30bc_walk(_, In, In).
31
32:- meta_predicate(walk_list(*, 2, *)). 33
34walk_list([ItemIn|ItemsIn], Handler, [ItemOut|ItemsOut]):-
35 bc_walk(Handler, ItemIn, ItemOut),
36 walk_list(ItemsIn, Handler, ItemsOut).
37
38walk_list([], _, [])
Generic term transform */