gpt4 book ai didi

prolog - 如何找到对目标没有贡献的事实

转载 作者:行者123 更新时间:2023-12-02 00:08:38 30 4
gpt4 key购买 nike

我正在尝试编写一个程序来检查学生程序是否可以实现某个目标。我可以做那个部分。现在,我想检查学生程序是否真的包含不必要的代码。为了解决这个案例,我想我需要知道学生程序是否包含对指定目标没有贡献的事实。但是,我无法弄清楚如何找到对目标没有贡献的事实。

为了更容易理解,让我们考虑一个更简单的例子。在这个例子中,指定的目标是:john 是 tomy 的祖父吗?

father(john, jim).
father(jim, tomy).
father(john, david).
father(bruce, anne).
mother(mary, jim).

grandfather(A,B) :- father(A, X), father(X,B).

goal:- grandfather(john, tomy).

实际上只有以下事实才能满足目标:

father(john, jim).
father(jim, tomy).

我想知道的是哪些事实实际上对目标没有帮助。答案将是以下所有事实:

father(john, david).
father(bruce, anne).
mother(mary, jim).

非常感谢任何帮助。谢谢

最佳答案

您的问题无法在 Prolog 中直接回答,但您可以使用 failure-slice 手动回答。 .只需将 false 目标添加到您的程序中,并始终测试 goal 是否仍然成功。这是我得到的最小程序。

father(john, jim).father(jim, tomy).father(john, david) :-  false.father(bruce, anne) :- false.mother(mary, jim) :- false.grandfather(A,B) :- father(A, X), father(X,B).goal:- grandfather(john, tomy).

每次将目标 false 插入纯单调程序时,您肯定知道解决方案集会减少(或保持不变)。因此,找到这样的切片涉及的试验次数与设置此类目标的位置一样多。有时您可能想要添加目标 X = term 以进一步缩小程序范围。

当您想了解程序的终止属性时,故障切片特别有用,请参阅 了解更多。

关于prolog - 如何找到对目标没有贡献的事实,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16786274/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com