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

时间:2015-05-06 14:03:32

标签: prolog artificial-intelligence swi-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(time,X)函数的参数是什么,我总是会收到错误。 我花了一整夜才试一试,但我没办法。 任何指针都会很棒!! 感谢

2 个答案:

答案 0 :(得分:1)

您不会明白规则的含义。也许您正试图将当前时间列在术语get_date_time_value(time,x)出现的列表中:但是,该术语是否是对函数的调用? Prolog不支持这一点:只需查看您为get_date_time_value/2 谓词(不是函数)提供的条款,以及您看到的一系列调用谓词。因此,您的规则可能必须在一个子句中给出,该子句仅在对get_date_time_value/2谓词的调用也成立时才成立,并且子句head和call共享变量在它们之间传递信息。

答案 1 :(得分:1)

从结构我想它看起来应该是这样的:

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

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