在Prolog.NET中查询替代解决方案

时间:2013-03-23 15:32:31

标签: c# prolog

我是一名大学生,对Prolog来说很新。我目前正在开发一个C#应用程序,它应该使用任何合适的prolog-C#库与Prolog集成。我发现Prolog.NET(由Ali Hodroj开发)对我的场景来说是一个非常好的解决方案,它也符合我的要求。但是,在使用特定谓词时查询替代解决方案时遇到一些麻烦。例如,谓词,

add(X,Y,Ans) :- Ans is X+Y.

只有一个特定答案,如果用户分别为X和Y输入1和2,则为3。但是,

female(maria). 
female(emma). 
parent(bobby, emma).
parent(bobby, maria). 
daughter(X,Y) :- parent(X,Y), female(Y).

如果将女儿(X,Y)谓词作为女儿(bobby,D)查询,则D将有两个值为emma和maria,可以通过按“;”来迭代。在Prolog环境中。但是当使用C#和Prolog.NET时,我只能得到一个特定的值。例如:

AbstractTerm a = new AbstractTerm();
PrologClass proClass = new PrologClass();
proClass.daughter("bobby", a);

当从C#环境调用上面的子(X,Y)方法时,它只返回一个特定的解决方案(emma),我需要的是得到另一个解决方案,也就是玛丽亚。我尝试了很多东西,但无论如何我似乎无法获得其他价值。如果有人能说出如何实现这一目标,我将非常感激!这对我的项目工作来说是一个很好的帮助!

提前致谢! :)

1 个答案:

答案 0 :(得分:1)

实际上并非如此,因为此实施没有bagof

将查询包裹在bagof/3中,如下所示:

bagof( (X,Y), daughter(X,Y), Result).

您应该会收到所有结果的列表。查看其他谓词,找出目标的所有解决方案以获得更多选项。