Prolog初学者帮助获取当前时间

Prolog beginner help get current time

我正在修改Eliza程序http://cs.nyu.edu/courses/fall11/CSCI-GA.2110-003/documents/eliza.pl 试图让它在用户询问时打印系统时间 - 现在几点了? 阅读手册数小时后,我的 get_date_time_value() 函数开始工作。 如

get_date_time_value(Key, Value) :-
 get_time(Stamp),
 stamp_date_time(Stamp, DateTime, local),
 date_time_value(Key, DateTime, Value).

但是我不知道如何从定义为

的规则中调用此函数
rules([[time,0],[
    [1,[_],0,
            [please,do,not,get_date_time_value(time,x),.],
            ['I',dont,know,the,time,.]]]]).

是的,这是一项家庭作业,这对专家来说可能听起来很愚蠢,但我对 Prolog 编程真的很陌生,尽管我在面向对象和函数式编程方面有相当多的经验。 无论我向 get_date_time_value(time,X) 函数传递什么参数,我总是会收到错误消息。 我整晚都在尝试尝试方法,但我所做的一切都不起作用。 任何指针都会很棒! 谢谢

你根本不知道你的规则是什么意思。也许您正在尝试在出现术语 get_date_time_value(time,x) 的列表中获取当前时间:但是,该术语是对函数的调用吗? Prolog 不支持这一点:只需查看您为 get_date_time_value/2 predicate(不是 function)提供的子句以及您在那里看到的内容是对谓词的一系列调用。因此,您的规则可能必须在一个子句中给出,该子句仅在对您的 get_date_time_value/2 谓词的调用也成立时才成立,并且子句头和调用共享变量以在它们之间传递信息。

从结构上我猜应该是这样的:

rules([[time,0],[
    [1,[_],0,
            [it,is,HourLiteral,oclock,.],
            ['I',dont,know,the,time,.]]]]) :- get_date_time_value(hour, HourNumber), number_codes(HourNumber, HourString), atom_string(HourLiteral, HourString) .

不知道行不行。我没有测试。