2017-05-05 36 views
0

所以,我需要为prolog输出一些东西,我浏览过互联网,发现一些代码会输出各种各样的东西,但我还没有找到任何与解释为什么好有用。所以我来堆栈溢出的希望是,你可以帮助我为我们所有人困惑的问题提出一个通用的解决方案。或者你可以指出我已经写过的一篇我不知何故愚蠢地错过的文章。这也起作用。序言变量输出通用

这里是我的问题

setup_foo (X, B, Y, C) 
     foo(0, 1, [], 0-0). 

foo(X, B, Listy, A-Pair) :- 
      X < 60, %really this is any random number, but I'm not throwing in an undefined variable 
      Y is X + 1, 
      foo(Y, 1, Y|Listy, A-Pair). 

富的预期输出如下

我的问题是如何修改美孚输出,在随后结束递归的,以及如何推广将它推广为一个规则,该规则理论上具有变量,列表和对的任意组合,只有其中的一部分可以输出。

+1

您的代码编译时是否没有警告?你如何编译它?你如何运行它?你看到的是什么输出?你期望输出什么?你能以某种方式展示你正在做什么的最简单的例子吗?我很难理解你在问什么。我们现在有一个更困惑的人在那里:) – 2017-05-06 06:00:19

回答

0

你不会在Prolog中做“设置”。您可以拥有包含foo/4的初始输入值的顶级谓词foo/1

此外,您需要递归的基本情况。这可以是一个单独的条款,也可以是一个if-then-else的,如下:

foo(Pair) :- 
    foo(0,1,[],Pair). 

foo(X,B,Listy,A-Pair) :- 
    (X < 60 -> 
    Y is X + 1, 
    foo(Y,1,[Y|Listy],A-Pair) 
    ; A = B, Pair = Listy). 

您不能使用输入和输出相同的变量,目前还不清楚其中的1,来自于你的输出例子,所以我改变了一点。如果您需要两个输出值,则总共需要六个参数(foo/6)。