Return to Snippet

Revision: 21674
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