Prolog-如何将时间戳设置为谓词中的参数?

Prolog-如何将时间戳设置为谓词中的参数?,prolog,swi-prolog,Prolog,Swi Prolog,当我向DB断言新事实时,有没有办法使用get_time(T)[这是内置函数]作为参数? (我只想比较一下事实和时间) 代码: 运行示例: 我不想说“start(#),get_time()),我想说的是timestamp,它是在我第一次调用start_interval(Num)时创建的。 (当我调用它时,您还可以看到get_time(T)的输出) 可能吗? 也许有另一种方法来比较事实断言时间?您只需实际调用(无论后面是什么)get_time(T)表达式(名义上是谓词,但实际上不是,因为它的行为取决

当我向DB断言新事实时,有没有办法使用get_time(T)[这是内置函数]作为参数? (我只想比较一下事实和时间)

代码: 运行示例: 我不想说“start(#),get_time()),我想说的是timestamp,它是在我第一次调用start_interval(Num)时创建的。 (当我调用它时,您还可以看到get_time(T)的输出)

可能吗?
也许有另一种方法来比较事实断言时间?

您只需实际调用(无论后面是什么)get_time(T)表达式(名义上是谓词,但实际上不是,因为它的行为取决于调用它的确切时刻。非常不符合逻辑:我们处于I/O的真实状态)

在你写它的时候,它仍然是一个不被称为句法元素的元素,字面上代表它自己

(另外,使用
assertz/1
优先于旧的
assert/1
):

因此:

然后:


您只需实际调用
get\u time(T)
表达式(名义上是一个谓词,但实际上不是,因为它的行为取决于调用它的确切时刻。非常不符合逻辑:我们处于I/O的真实状态)

在你写它的时候,它仍然是一个不被称为句法元素的元素,字面上代表它自己

(另外,使用
assertz/1
优先于旧的
assert/1
):

因此:

然后:

这是双重张贴在这是双重张贴在
:- 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.
:- 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.