Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Prolog beginner help get current time

I am modifying the Eliza program http://cs.nyu.edu/courses/fall11/CSCI-GA.2110-003/documents/eliza.pl trying to get it to print the system time when user asks - What Time is it? After hours of reading through manual I got my get_date_time_value() function to work. As in

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

However I am at a loss as to how do I call this function from my rule which is defined as

rules([[time,0],[
    [1,[_],0,
            [please,do,not,get_date_time_value(time,x),.],
            ['I',dont,know,the,time,.]]]]).

Yes this is a homework assignment and this might sound silly to experts ,but I am really new to Prolog programming even though I have quite some experience in object oriented and functional programming. No matter what parameters I pass to the get_date_time_value(time,X) function I am always getting an error. I spent all night on a hit an trial approach ,but nothing I do works. Any pointers will be great!! Thanks

like image 838
Mad Scientist Avatar asked Jul 19 '26 20:07

Mad Scientist


2 Answers

From the structure I guess it should look something like this:

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

I do not know if it works. I did not test it.

like image 200
User Avatar answered Jul 21 '26 18:07

User


You do not give any idea of what you mean by your rule. Maybe you are trying to have the current time in the list where the term get_date_time_value(time,x) appears: but, is that term a call to a function? Prolog does not support that: just look at the clause you give for the get_date_time_value/2 predicate (not function) and what you see there is a sequence of calls to predicates. So your rule probably must given in a clause that holds only if the call to your get_date_time_value/2 predicate also holds, and the clause head and the call share variable(s) to pass information between them.

like image 40
migfilg Avatar answered Jul 21 '26 19:07

migfilg