Różnice

Różnice między wybraną wersją a wersją aktualną.

Odnośnik do tego porównania

pl:prolog:pllib:eliza_simulator [2019/06/27 15:50] (aktualna)
Linia 1: Linia 1:
 +====== Eliza simulator ======
 +{{tag>​simulator conversation}}
 +===== Description =====
 +ELIZA - Simulates a conversation via side effects.
 +
 +**Source**: ​ The Art of Prolog
 +===== Download =====
 +Program source code: {{eliza_simulator.pl}}
 +===== Listing =====
 +<code prolog>
 +/*
 +    eliza :- Simulates a conversation via side effects.
 +*/
 +
 +%  For testing this program prior to Standard Prolog being widley
 +%  available, the program below uses read rather than read_word_list.
 +%  You need to type in a list of waords such as [i, am,​unhappy].
 +
 +eliza :- read(Input),​ eliza(Input),​ !.
 +
 +eliza([bye]) :-
 +   ​writeln(['​Goodbye. I hope I have helped you'​]).
 +eliza(Input) :-
 +   ​pattern(Stimulus,​Response),​
 +   ​match(Stimulus,​Table,​Input),​
 +   ​match(Response,​Table,​Output),​
 +   ​reply(Output),​
 +   ​read(Input1),​
 +   !, eliza(Input1).
 +
 +/*
 + match(Patterm,​Dictionary,​Words) :-
 + Pattern matches the list of words Words, and matchings
 + are recorded in the Dictionary.
 +*/
 +
 +match([N|Pattern],​Table,​Target) :-
 +   ​integer(N),​
 +   ​lookup(N,​Table,​LeftTarget),​
 +   ​append(LeftTarget,​RightTarget,​Target),​
 +   ​match(Pattern,​Table,​RightTarget).
 +match([Word|Pattern],​Table,​[Word|Target]) :-
 +   ​atom(Word),​
 +   ​match(Pattern,​Table,​Target).
 +match([],​Table,​[]).
 +
 +/*
 +    pattern(Stimulus,​Response) :-
 + Response is an applicable response pattern to the pattern Stimulus.
 +*/
 +
 +pattern([i,​am,​1],​['​How',​long,​have,​you,​been,​1,?​]).
 +pattern([1,​you,​2,​me],​['​What',​makes,​you,​think,'​I',​2,​you,?​]).
 +pattern([i,​like,​1],​['​Does',​anyone,​else,​in,​your,​family,​like,​1,?​]).
 +pattern([i,​feel,​1],​['​Do',​you,​often,​feel,​that,​way,?​]).
 +pattern([1,​X,​2],​['​Please',​you,​tell,​me,​more,​about,​X]) :-
 + important(X).
 +pattern([1],​['​Please',​go,​on,'​.'​]).
 +
 +    important(father). important(mother).
 +    important(sister). important(brother).
 +    important(son). important(daughter).
 +
 +reply([Head|Tail]) :- write(Head),​ write('​ '), reply(Tail).
 +reply([]) :- nl.
 +
 +lookup(X,​[(X,​V)|XVs],​V).
 +lookup(X,​[(X1,​V1)|XVs],​V) :- X \== X1, lookup(X,​XVs,​V).
 +
 +
 +% Program 14.15 ELIZA
 +</​code>​
 +===== Comments =====
  
pl/prolog/pllib/eliza_simulator.txt · ostatnio zmienione: 2019/06/27 15:50 (edycja zewnętrzna)
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0