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),
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