【问题标题】:Prolog beginner help get current timeProlog初学者帮助获取当前时间
【发布时间】:2015-05-06 14:03:32
【问题描述】:

我正在修改 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) 函数,我总是会收到错误消息。 我整晚都在尝试一种方法,但我所做的一切都不起作用。 任何指针都会很棒! 谢谢

【问题讨论】:

    标签: prolog artificial-intelligence swi-prolog


    【解决方案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) .
    

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

    【讨论】:

    • PO 明确表示这是作业:他是诚实的,并不要求给出最终解决方案。
    • @User 我刚刚测试了它,它工作正常,谢谢 :) 应该是我更复杂的谓词逻辑和知识库的一个很好的起点,例如。 11:59 PM 应该回答现在快午夜了,你应该去睡觉了。
    【解决方案2】:

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

    【讨论】:

    • 是的,我仍在思考谓词的概念。自我注意——我应该在我的离散数学课上多加注意:)
    • 起初使用关系(谓词背后的概念)可能看起来有点困难,但学习在编程中使用它们对某些应用程序来说是有回报的,尤其是在 AI 中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-10
    • 1970-01-01
    • 2021-04-11
    • 2022-01-17
    相关资源
    最近更新 更多