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