Revision: 21674
Initial Code
Initial URL
Initial Description
Initial Title
Initial Tags
Initial Language
at December 18, 2009 07:46 by philkav
Initial Code
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% What have the romans ever done for us? %%%%
%% Written by : Philip Kavanagh %%%%%
%% DT228/4 - C06412882 %%%%%%
%% Prologue Assignment December 2009 %%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% -- INSTRUCTIONS -- %%%
%% Prolog will print a statement, prompts user for input. %%%%
%% User enters a sentance and ends it with a full stop, %%%%%
%% exclamation point or question mark. Prolog will then decide %%%%%%
%% whether or not the answer is valid and will return it's decision. %%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%
%% said(X) :- assert(X, "a", X), retract said(Y), assert said(X)
%% ----- Function called BY THE MAIN FUNCTION (See last line of code) the first time the program is run
firstRun:-
nl,write('REG : They bled us white, the bastards. They\'ve taken everything we had. And not just from us! From our fathers,and from our father\'s fathers.'),
nl,write('LOR : And from our father\'s father\'s fathers.'),
nl,write('REG : Yeah.'),
nl,write('LOR : And from our father\'s father\'s father\'s fathers.'),
nl,write('REG : Yeah, all right Stan, don\'t delay with the point. And what have they ever given us in return?'),
nl,write('REG : What have the romans ever done for us?'),nl,run.
%% ----- this is the programs base
run:-
write('YOU : '),getSentance(_),nl,run.
%% ----- To end the program. (This may be incorrectly applied).
quit:-
break.
%% ----- read list and pick keywords -----
%% ----- Search recursively through the list - If you find the word, cut out, otherwise search the remainder of the list.
%% ----- exclamation mark '!' is used to cut.
contains([aqueduct|_]) :- !,write('REG : Oh. Yeah, yeah, they did give us the aqueduct, ah, that\'s true,'),apartFrom,assert(#(aqueduct)),listing(#).
contains([sanitation|_]) :- !,write('REG : Yeah, all right, I\'ll grant you the sanitation,'),apartFrom,assert(#(sanitation)),listing(#).
contains([roads|_]) :- !,write('REG : Oh, yeah, obviously the roads. I mean the roads go without saying, don\'t they? '),apartFrom,assert(#(roads)),listing(#).
contains([irrigation|_]) :- !,write('REG : Yeah, yeah, all right, fair enough - irrigation too... '),apartFrom,assert(#(irrigation)),listing(#).
contains([medicine|_]) :- !,write('REG : Yes, ok - medicine! '),apartFrom,assert(#(medicine)),listing(#).
contains([education|_]) :- !,write('REG : Well sure yeah, education I suppose? '),apartFrom,assert(#(education)),listing(#).
contains([wine|_]) :- !,write('REG : Yes and the wine... '),apartFrom,assert(#(wine)),listing(#).
contains([publicbaths|_]) :- !,write('REG : And the publicbaths, ok'),apartFrom,assert(#(publicbaths)),listing(#).
contains([order|_]) :- !,write('REG : Brought order, very well '),apartFrom,assert(#(order)),listing(#).
contains([peace|_]) :- !,write('REG : Oh, peace! Shut Up!'),nl,write('________________'),nl,nl,write('---End Scene---'),nl,write('________________'),nl,nl,quit.
%% ----- recursion and NOT case
contains([Head|Tail]) :- contains(Tail), !.
contains(_) :- write('REG : The Romans had nothing to do with that!').
apartFrom:-write('Well apart from the : ').
%% ----- this function reads in the things and creates a list from them -----
readIntoList1([Head|Tail]):-read(X),not(X=end),Head=X,readIntoList1(Tail).
readIntoList1([]).
readIntoList2([Head|Tail]):-read(X),not(X=end),Head=X,readIntoList2(Tail).
readIntoList2([]).
%% ----- Here we are converting the list format to a proper output format -----
%% ----- Instead of [this, is, a, list] beign displayed, it will say : this is a list
writeSentance([H|T]):-name(H,[Fl|Lt]),Cap is Fl-32,name(X,[Cap|Lt]),write(X),writeSentanceTail(T).
writeSentanceTail([]):-write('.').
writeSentanceTail([H|T]):-write(', '),write(H),writeSentanceTail(T).
%% ----- these functions are where we turn sentances into lists in order to process each individual word -----
getSentance([W|Ws]):-get0(Char),readWord(Char,W,C1),restOfSentance(W,C1,Ws),contains([W|Ws]).
restOfSentance(W,_,[]):-lastword(W),!.
restOfSentance(_,C,[W1|Ws]):-readWord(C,W1,C1),restOfSentance(W1,C1,Ws).
readWord(C,W,C1):-single_character(C),!,name(W,[C]),get0(C1).
readWord(C,W,C2):-in_word(C,NewC),!,get0(C1),restOfWord(C1,Cs,C2),name(W,[NewC|Cs]).
readWord(_,W,C2):-get0(C1),readWord(C1,W,C2).
restOfWord(C,[NewC|Cs],C2):-in_word(C,NewC),!,get0(C1),restOfWord(C1,Cs,C2).
restOfWord(C,[],C).
%%---------------(ASCII) allow :
single_character(44). %% comma ','
single_character(58). %% colon ':'
single_character(33). %% exclamation '!'
single_character(59). %% semi-colon ';'
single_character(63). %% question '?'
single_character(46). %% full-stop '.'
%%-- The characters are between :
in_word(C,C):-C > 96,C < 123. %% lowercase letters
in_word(C,C):-C > 47,C < 58. %% Numbers
in_word(39,39). %% single inverted comma
in_word(45,45). %% hyphenation
in_word(C,L):-C>64,C<91,L is C+32. %% uppercase letters
lastword('.').
lastword('!').
lastword('?').
%% ----- end of sentance to list -----
%% ----- will load when the program is run -----
:-dynamic(#(X)),nl,firstRun.
Initial URL
Initial Description
Initial Title
AI Assignment - Monthy Python Skit
Initial Tags
Initial Language
Prolog