:- use_module(library(mavis)). % copied and pasted from pldoc/doc_modes. % should rework that module so this is unnecessary. :- op(750, xf, ...). % Repeated argument: Arg... :- op(650, fx, +). % allow +Arg :- op(650, fx, -). % allow -Arg :- op(650, fx, ?). % allow ?Arg :- op(650, fx, :). % allow :Arg :- op(650, fx, @). % allow @Arg :- op(650, fx, !). % allow !Arg :- op(200, xf, //). % allow for Head// is det. %% nm(+Mode, -Args, -Det). nm(Mode, Args, Det) :- mavis:normalize_mode(Mode, Args0, Det0), Args == Args0, Det == Det0. :- use_module(library(tap)). nm( foo(A:integer) , [ arg(?,A,integer) ] , nondet ). nm( foo(A:integer, +B:atom) is semidet , [ arg(?,A,integer) , arg(+,B,atom) ] , semidet ). nm( sum_list(+List, -Sum) , [ arg(+, List, any) , arg(-, Sum, any) ] , nondet ). nm( head(+List:list(T), -Head:T) is semidet , [ arg(+, List, list(T)) , arg(-, Head, T) ] , semidet ). nm( plain(X) , [ arg(?, X, any) ] , nondet ).