Prolog - 使用子列表产生不同的结果

时间:2017-12-03 23:14:25

标签: prolog

最近我一直在练习子列表,并决定制作一个与我的工作相关的例子。这是我目前所拥有的中等简化版本,但应该与测试目的一样:

wordsA([aaa, bbb, ccc]).
wordsB([ddd, eee, fff]).

start:-writeln('Sublist initiated'), begin.
begin:-readln(A),
maplist(downcase_atom, A, X),
X \= [quit] ->
maplist(checkAtom,X,Temp),
sort(Temp,Case),
wrt(Case),
bot;
writeln('Sublist demo').

checkAtom(A,X):-
wordsA(Y),member(A,Y)-> X = wA;
wordsB(Y),member(A,Y)-> X = wB;
caseA(Y),member(A,Y)-> X = cA;
caseB(Y),member(A,Y)-> X = cB;
caseC(Y),member(A,Y)-> X = cC;
X = nothing.

% Case determiners

caseA([finish]).
caseB([end]).
caseC([stop]).

wrt(Case):-
sublist([wA,wB,cA],Case) -> writeln('answer');
sublist([wA,wB,cB],Case) -> writeln('solution');
sublist([wA,wB,cC],Case) -> writeln('result');
writeln('Solution not found').

sublist([], _ ).
sublist([X|XS], [X|XSS] ) :- sublist( XS, XSS ).
sublist([X|XS], [_|XSS] ) :- sublist( [X|XS], XSS ).

现在,我打算发生的是一种类型"开始"启动循环然后请求输入(子列表启动)。然后,人们应该能够从单词A行,单词B行中的单词和确定案例中键入单词,以产生三种独特结果之一; '回答','解决方案'和'结果' (例如" aaa ddd finish" - " answer")

然而,恰恰相反,Prolog将输入的内容视为未被识别的条目并产生第四个结果; '未找到解决方案'。我一次又一次地重复分析我的代码,并且无法准确诊断是什么导致程序无法识别我的输入。

我不是百分百肯定这里出了什么问题,我不相信这个错误是一个大错,但我想知道发生了什么以及需要做些什么来让我的子列表发挥作用意图。

0 个答案:

没有答案