/*atn*/ /*generation of random sentences from an ATN Alan Bundy 19.11.79 use with random*/ /*Top Level*/ generate :- generate(sentence,start), writef('\n\n',[]), generate. generate(ATN,finish). generate(ATN,Node) :- arc(ATN,Node,Choices), random_pick(Choices,[NewNode,Label,Type]), gen(Type,Label,ATN,NewNode). gen(atn,SubATN,ATN,NewNode) :- generate(SubATN,start), generate(ATN,NewNode). gen(word,Word,ATN,NewNode) :- writef('%t ',[Word]), generate(ATN,NewNode). /*ATNs*/ /*Sentence ATN*/ arc(sentence,start,[[a,nounphrase,atn]]). arc(sentence,a,[[b,verb,atn]]). arc(sentence,b,[[c,nounphrase,atn]]). arc(sentence,c,[[finish,stop_mark,atn]]). /*nounphrase ATN*/ arc(nounphrase,start,[[finish,proper_noun,atn], [a,determiner,atn]]). arc(nounphrase,a,[[finish,noun,atn], [a,adjective,atn]]). /*verb ATN*/ arc(verb,start,[[finish,is,word], [finish,kisses,word], [finish,kills,word]]). /*determiner ATN*/ arc(determiner,start,[[finish,a,word], [finish,an,word], [finish,the,word]]). /*noun ATN*/ arc(noun,start,[[finish,fascist,word], [finish,dictator,word]]). /*adjective ATN*/ arc(adjective,start,[[finish,happy,word], [finish,fascist,word], [finish,italian,word]]). /*Proper Noun ATN*/ arc(proper_noun,start,[[finish,benito,word]]). /*Stop Mark ATN*/ arc(stop_mark,start,[[finish,(.),word], [finish,(?),word], [finish,(!),word]]).