1:- module(canny_arity, [arities/2]).
Empty lists fail. Also, lists containing non-integers fail to unify. The implementation works forwards and backwards: arity compound to arity list or vice versa, mode (+, -) or mode (-, +).
15arities({Arity}, [Arity]) :- integer(Arity), !. 16arities(Arities0, Arities) :- 17 Arities0 =.. [{}, Arities_], 18 arities_(Arities_, Arities). 19 20arities_((Arity0, Arity), [Arity0, Arity]) :- 21 integer(Arity0), 22 integer(Arity), 23 !. 24arities_(Arities0, [H|T]) :- 25 Arities0 =.. [',', H, T0], 26 integer(H), 27 arities_(T0, T)