【问题标题】:Why is my prolog predicate stop when it gets the first answer?为什么我的序言谓词在得到第一个答案时停止?
【发布时间】:2019-11-15 18:49:57
【问题描述】:

我有这个谓词:

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).

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

【问题讨论】:

    标签: prolog chatbot


    【解决方案1】:

    你有没有试过在谓词答案的第二个实例中去掉删减? (对不起,在答案部分写了这个,但我没有足够的业力来评论:/)

    【讨论】:

    • 是的,我确实尝试过取消剪辑,但没有它,谓词永远不会结束。
    • 哦,是的,你是对的,我在解释器中尝试了你的代码,它确实提供了无限的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多