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



我正在修改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(时间,X)函数的参数是什么,我总是得到一个错误。 我整晚都在尝试方法,但我所做的一切都不起作用。 任何指针都会很棒!! 谢谢

从结构上我想它应该看起来像这样:

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

我不知道它是否有效。我没有测试它。

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

最新更新