为什么我的序言谓词在得到第一个答案时就停止了?

时间:2019-11-15 10:44:41

标签: prolog chatbot

我有这个谓词:

ans(["Hello"],0).
ans(["Hello", "dear", "customer"],0).
ans(["Good","Morning"],0).
ans(["Good", "Afternoon"],0).
ans(["Good", "Night"],0).

answer([], []).
answer([H], List):- findall(ans(X,S), (ans(X,S), member(H, X)), List) , !.
answer([H|T], List):- answer([H], L1), answer([T], L2), append(L1, L2, List).

此谓词接收原子列表,并应返回与给定列表中的原子匹配的结构ans。 例如:answer([“ Hello”],L)L = [ans([“ Hello”],0),ans([“ Hello”,“ dear”,“ customer”],0)] 但这仅适用于第一个原子,我不明白为什么。如果列表中有1个以上的原子,则仅适用于第一个原子。 例如:answer([“ Hi”,“ Hello”],L)L = [],它应返回与上述其他示例相同的输出。

1 个答案:

答案 0 :(得分:1)

您是否曾经尝试过在谓词答案的第二个实例中削减开支? (很抱歉在答案部分写了这个,但是我没有足够的业力来评论:/)