Prolog - 如何将时间戳设置为谓词中的参数?
Prolog - How to set timestamp as an argument in a predicate?
当我向 DB 断言新事实时,有什么方法可以使用 get_time(T) [这是内置函数] 作为参数吗?
(我只是想比较事实断言时间)。
代码:
:- dynamic start/2.
start_interval(A) :- start(A, _), !, false.
start_interval(A) :- assert(start(A, get_time(T))).
运行 示例:
Warning: c:/users/*****/desktop/prolog/4.pl:6:
Warning: Singleton variables: [T]
Welcome to SWI-Prolog (threaded, 64 bits, version 8.2.1)
SWI-Prolog comes with ABSOLUTELY NO WARRANTY. This is free software.
Please run ?- license. For legal details.
For online help and background, visit https://www.swi-prolog.org
For built-in help, use ?- help(Topic). or ?- apropos(Word).
?- start_interval(1).
true.
?- start_interval(2).
true.
?- listing(start).
:- dynamic start/2.
start(1, get_time(_)).
start(2, get_time(_)).
true.
?- get_time(T).
T = 1598718310.038124.
而不是“开始(#,get_time(_))”,我想得到时间戳,这是我最初调用start_interval(Num)时制作的。
(当我调用它时,您还可以看到 get_time(T) 的输出)
可能吗?
也许还有另一种方法可以比较事实断言时间?
你只需要实际调用(无论后面是什么)get_time(T)
表达式(名义上是谓词,但实际上不是,因为它的行为取决于 调用它的确切时刻.非常non-logical:我们是真实的I/O).
在您编写它时,它仍然是一个 un-called 句法元素,字面意思 本身。
(另外,使用 assertz/1
而不是旧的 assert/1
):
所以:
:- dynamic start/2.
start_interval(A) :- start(A, _), !, false.
start_interval(A) :- get_time(T), assertz(start(A, T)).
然后:
?- start_interval(1).
true.
?- start(A,T).
A = 1,
T = 1598726506.9420764.
当我向 DB 断言新事实时,有什么方法可以使用 get_time(T) [这是内置函数] 作为参数吗? (我只是想比较事实断言时间)。
代码:
:- dynamic start/2.
start_interval(A) :- start(A, _), !, false.
start_interval(A) :- assert(start(A, get_time(T))).
运行 示例:
Warning: c:/users/*****/desktop/prolog/4.pl:6:
Warning: Singleton variables: [T]
Welcome to SWI-Prolog (threaded, 64 bits, version 8.2.1)
SWI-Prolog comes with ABSOLUTELY NO WARRANTY. This is free software.
Please run ?- license. For legal details.
For online help and background, visit https://www.swi-prolog.org
For built-in help, use ?- help(Topic). or ?- apropos(Word).
?- start_interval(1).
true.
?- start_interval(2).
true.
?- listing(start).
:- dynamic start/2.
start(1, get_time(_)).
start(2, get_time(_)).
true.
?- get_time(T).
T = 1598718310.038124.
而不是“开始(#,get_time(_))”,我想得到时间戳,这是我最初调用start_interval(Num)时制作的。 (当我调用它时,您还可以看到 get_time(T) 的输出)
可能吗? 也许还有另一种方法可以比较事实断言时间?
你只需要实际调用(无论后面是什么)get_time(T)
表达式(名义上是谓词,但实际上不是,因为它的行为取决于 调用它的确切时刻.非常non-logical:我们是真实的I/O).
在您编写它时,它仍然是一个 un-called 句法元素,字面意思 本身。
(另外,使用 assertz/1
而不是旧的 assert/1
):
所以:
:- dynamic start/2.
start_interval(A) :- start(A, _), !, false.
start_interval(A) :- get_time(T), assertz(start(A, T)).
然后:
?- start_interval(1).
true.
?- start(A,T).
A = 1,
T = 1598726506.9420764.