prolog中蕴涵链的可视化

prolog中蕴涵链的可视化,prolog,logic,Prolog,Logic,我想要的是一个prolog程序,其中我列出了一堆if-then(很多规则)。因此,我希望看到一个作为其中一条规则结果的含义图。因此,如果a()通过一系列规则引导到50个其他事物,我希望看到它引导到的所有事物,以及它到达那里的路径。也许是这样的: ?- (something here...) :- studyBiology(X) studyBiology(X) goToMedicalSchool(X) becomeADoctor(X) learnToHateBio

我想要的是一个prolog程序,其中我列出了一堆if-then(很多规则)。因此,我希望看到一个作为其中一条规则结果的含义图。因此,如果a()通过一系列规则引导到50个其他事物,我希望看到它引导到的所有事物,以及它到达那里的路径。也许是这样的:

?- (something here...) :- studyBiology(X)

studyBiology(X)
    goToMedicalSchool(X)
        becomeADoctor(X)
    learnToHateBiology(X)
        startARockBand(X)
类似地,我想命名一些谓词,并查看所有到达该谓词的方法,以及通向该谓词的路径:

?- beSuccessful(X) :- (something here...).

beSuccessful()
    goToCollege()
        getGoodGradesInSchool()
    runAnEthicalBusiness(), haveAGreatMarketingTeam()
        dropOutAndStartABusiness()

这在Prolog中是可能的吗?或者我应该用另一种语言构建一些自定义的东西来实现这一点吗?

任何事情都是可能的。详细程度取决于您的详细要求。成功后,每个规则都可以对标准输出执行
写入('rule x')、nl
。如果需要每个级别缩进输出,则可能需要携带一个深度变量(表示规则调用中的深度),用于确定缩进级别。这不仅仅是把一些东西放在你的
(这里的东西…:-studyBiology(X)
。我有一些规则,比如
b(X):-a(X)
b(X):-c(X)
,但是当我尝试查询
b(X)
时,出现了一个错误。我认为这是因为我没有任何事实表明某物具有属性a、b或c。我希望能够看到导致b的一切。我该怎么做?如果您正在寻找执行跟踪,可以使用
跟踪
。您还可以跟踪特定谓词,
trace(b)
。但是Prolog中没有一个预构建的工具可以静态分析代码。