如何浏览Prolog列表中的各个元素

时间:2015-12-07 03:34:48

标签: list recursion prolog rules

我正在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?我是否必须使用递归形式并创建另一个规则?

0 个答案:

没有答案