我正在修改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)函数的参数是什么,我总是会收到错误。 我花了一整夜才试一试,但我没办法。 任何指针都会很棒!! 感谢
答案 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) .
我不知道它是否有效。我没有测试它。