1:- prolog_use_module(library(julian)).    2
    3replaceFunctionalArgs(Item,Style,Result) :-
    4	viewIf([item,Item,style,Style]),
    5	Item =.. [Pred|Args],
    6	viewIf([args,Args]),
    7	findall(ArgPosition,(functionalInArgs(Pred,TmpArgPosition),ArgPosition is TmpArgPosition - 1),ArgPositions),
    8	viewIf([argPositions,ArgPositions]),
    9	length(Args,ArgsLength),
   10	viewIf([argsLength,ArgsLength]),
   11	length(ArgPositions,ArgPositionsLength),
   12	viewIf([argPositionsLength,ArgPositionsLength]),
   13	(   (	ArgPositionsLength > 0) ->
   14	    (	
   15		(   Style = variable ->
   16		    (	
   17			viewIf([argPositionsLength1,ArgPositionsLength]),
   18			length(ArgReplacements,ArgPositionsLength)
   19		    ) ;   
   20		    (	Style = blank ->
   21			(   
   22			    viewIf([argPositionsLength2,ArgPositionsLength]),
   23			    repl(blank,ArgPositionsLength,ArgReplacements)
   24			) ;   
   25			view([styleWTF,Style]))),
   26		viewIf([argReplacements,ArgReplacements]),
   27		replaceArgPositions(Args,ArgPositions,ArgReplacements,NewArgs),
   28		Result =.. [Pred|NewArgs]
   29	    ) ;
   30	    (	Result = Item)),
   31	viewIf([result,Result]).
   32
   33
   34atTimeQueryNow(Query) :-
   35	getCurrentDateTime(DateTime),
   36	atTimeQuery(DateTime,Query).
   37
   38atTimeQuery(DateTime,Query) :-
   39	view([dateTime,DateTime]),
   40	view([query,Query]),
   41	view([findall(atTime(DateTime2,Query2),(atTime(DateTime2,Query2),Query = Query2,view([query,Query,query2,Query2,dateTime,DateTime,dateTime2,DateTime2]),compareTime(>,DateTime,DateTime2)),Results)]),
   42	findall(atTime(DateTime2,Query2),(atTime(DateTime2,Query2),Query = Query2,compareTime(>,DateTime,DateTime2)),Results),
   43	view([results,Results]),
   44	findall(Query4,(member(atTime(_,Query3),Results),replaceFunctionalArgs(Query3,blank,Query4)),TmpDistinctQueries),
   45	view([tmpDistinctQueries,TmpDistinctQueries]),
   46	setof(DistinctQuery,member(DistinctQuery,TmpDistinctQueries),DistinctQueries),
   47	view([distinctQueries,DistinctQueries]),
   48	member(TmpDistinctQuery,DistinctQueries),
   49	replaceFunctionalArgs(TmpDistinctQuery,variable,DistinctQuery),
   50	findall(atTime(A,DistinctQuery),member(atTime(A,DistinctQuery),Results),AllResults),
   51	predsort(compareAtTime,AllResults,SortedResults),
   52	view([sortedResults,SortedResults]),
   53	last(SortedResults,Result),
   54	view([result1,Result]),
   55	term_variables(Query,Vars),
   56	atTime(_,Query) = Result.
   81compareAtTime(Order,atTime(T1,A),atTime(T2,B)) :-
   82	viewIf([a,A,b,B,order,Order]),
   83	compareTime(Order,T1,T2).
   84
   85compareTime(>,TI1,TI2) :-
   86	fixTime(TI1,T1),
   87	fixTime(TI2,T2),
   88	julian:compare_time(>,T1,T2).
   89compareTime(<,TI1,TI2) :-
   90	fixTime(TI1,T1),
   91	fixTime(TI2,T2),
   92	julian:compare_time(<,T1,T2).
   93compareTime(=,TI1,TI2) :-
   94	fixTime(TI1,T1),
   95	fixTime(TI2,T2),
   96	julian:compare_time(=,T1,T2).
   97
   98fixTime(TI1,T1) :-
   99	viewIf([t1,T1,t2,T2]),
  100	TI1 = [Y-M-D,H:Mi:S],
  101	viewIf([s,S]),
  102	(   not(integer(Y)) ->
  103	    (	
  104		atom_number(Y,Y1),
  105		atom_number(M,M1),
  106		atom_number(D,D1),
  107		atom_number(H,H1),
  108		atom_number(Mi,Mi1),
 atom_number(S, S1)
  110		viewIf([sb,S]),
  111		atom_number(S,TmpS),
  112		S1 is float(TmpS),
  113		viewIf([s1,S1])
  114	    )
  114 ;
  115	    (	
  116		Y = Y1,
  117		M = M1,
  118		D = D1,
  119		H = H1,
  120		Mi = Mi1,
  121		(   number(S) -> (S1 is float(S)) ; 
  122		(
  123		 viewIf([sa,S]),
  124		 atom_number(S,TmpS),
  125		 S1 is float(TmpS),
  126		 viewIf([s1,S1])
  127		))
  128	    ))
  128,
  129	viewIf(wtf),
  130	T1 = [Y1-M1-D1,H1:Mi1:S1],
  131	viewIf(wtf),
  132	viewIf([time,T1]),
  133	true