option(guard_simplification,on). option(mode,sum(+,?)). option(type_definition,type(list(X), [ [], [X | list(X)]])). option(type_declaration,sum(list(int),int)). :- constraints sum/2. sum([],S) <=> S=0. sum([A|R],S) <=> sum(R,T), S is A+T. sum_prolog([],S) :- S=0. sum_prolog([A|R],S) :- sum_prolog(R,T), S is A+T. go :- go(10000,500). go(Count,N):- measure(main_prolog(Count,N), true, Utime,Gtime,System), write(bench(sum_prolog,Count-N,Utime,Gtime,System)), write('.'),nl,fail. go(Count,N):- measure(main(Count,N), true, Utime,Gtime,System), write(bench(sum_CHR,Count-N,Utime,Gtime,System)), write('.'),nl,fail. makelist(0,[]). makelist(N,[1|R]) :- N>0, N1 is N-1, makelist(N1,R). main(N,0). main(N,K):- K>0, makelist(N,L), (sum(L,S),fail;K1 is K-1,main(N,K1)). main_prolog(N,0). main_prolog(N,K):- K>0, makelist(N,L), (sum_prolog(L,S),fail;K1 is K-1,main_prolog(N,K1)).