Prolog变量输出Generic

时间:2017-05-05 23:38:40

标签: prolog

所以,我需要为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).

foo的预期输出如下

  X = 60
  Listy = [Long list that I'm not typing out]
  A-Pair = 1-1

我的问题是如何修改Foo以在递归结束时输出它,以及如何将其推广到理论上具有变量,列表和对的任何组合的规则,其中只有一些可以输出。

1 个答案:

答案 0 :(得分:0)

你没有&#34;设置&#34;在Prolog。您可以使用包含foo/1的初始输入值的顶级谓词foo/4

此外,您需要递归的基本案例。这可以是一个单独的子句,也可以是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)。