我正在Prolog中写一个Lite版本的Eliza https://en.wikipedia.org/wiki/ELIZA。这些是我想要提供的陈述和我想要接收的答复(陈述以列表形式给出):
就绪> [我觉得,精]
伊丽莎:为什么你觉得很好
准备> [你,是,一,计算机]
伊丽莎:我不是电脑
准备> [你,你,说话,葡萄牙语]
伊丽莎:不,我说俄语
我正在提供一系列规则,将声明单词更改为响应单词:
change(X,Y):- X = 'you', Y = 'i'.
change(X,Y):- X = 'i', Y = 'why do you'.
change(X,Y):- X = 'are', Y = 'am not'.
change(X,Y):- X = 'do', Y = 'no'.
change(X,Y):- X = 'portuguese', Y = 'russian'.
我的提示和响应的无限交互式循环如下所示:
eliza:-
nl,
write("Ready> "),
read(X),
answer(X,Y),
write('Eliza: '),
write(Y),
nl,
eliza.
我的问题在于循环的answer(X,Y)
部分。如果read(X)
采用像[i,feel,fine]这样的单词列表,那么我该如何制定一个规则answer(X,Y)
来按顺序排列列表中的每个元素并调用相应的{{1}规则改变单词并将其插回结果Y?我是否必须使用递归形式并创建另一个规则?