/*atn*/ /*generation of random sentences from an ATN Alan Bundy 19.11.79 use with eliza (for print_list)*/ /*Top Level*/ generate :- generate(sentence,start,Sentence), print_list(Sentence), fail. generate(ATN,finish,[]). generate(ATN,Node,[Word|Rest]) :- arc(ATN,Node,NewNode,Word,t), generate(ATN,NewNode,Rest). generate(ATN,Node,Sent) :- arc(ATN,Node,NewNode,SubATN,nt), generate(SubATN,start,SubBit), generate(ATN,NewNode,Rest), append(SubBit,Rest,Sent). /*ATNs*/ /*Sentence ATN*/ arc(sentence,start,a,nounphrase,nt). arc(sentence,a,b,verb,nt). arc(sentence,b,c,nounphrase,nt). arc(sentence,c,finish,stop_mark,nt). /*nounphrase ATN*/ arc(nounphrase,start,a,determiner,nt). arc(nounphrase,a,finish,noun,nt). arc(nounphrase,a,a,adjective,nt). arc(nounphrase,start,finish,proper_noun,nt). /*verb ATN*/ arc(verb,start,finish,is,t). arc(verb,start,finish,kills,t). arc(verb,start,finish,kisses,t). /*determiner ATN*/ arc(determiner,start,finish,a,t). arc(determiner,start,finish,an,t). arc(determiner,start,finish,the,t). /*noun ATN*/ arc(noun,start,finish,fascist,t). arc(noun,start,finish,dictator,t). /*adjective ATN*/ arc(adjective,start,finish,happy,t). arc(adjective,start,finish,fascist,t). arc(adjective,start,finish,italian,t). /*Proper Noun ATN*/ arc(proper_noun,start,finish,benito,t). /*Stop Mark ATN*/ arc(stop_mark,start,finish,(.),t). arc(stop_mark,start,finish,(?),t). arc(stop_mark,start,finish,(!),t).