BinProlog 5.75 integrates a number of useful higher-order predicates working on deterministic, functional style predicates. If your program is mostly functional the best thing is of course to forget about logic programming and write it in Haskell. However, with efficient implementatations of map/3, foldl/4, foldr/4 and the call/N as builtins BinProlog reduces the amount of extra argument book-keeping programmers face. Sum/2 and prod/2, computing the sum and the product of a list (now also builtins) are good examples of this more compact and fairly efficient higher-order programming style.
sum(Xs,R):-foldl(+,0,Xs,R). prod(Xs,R):-foldl(*,1,Xs,R).