所以,我需要为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以在递归结束时输出它,以及如何将其推广到理论上具有变量,列表和对的任何组合的规则,其中只有一些可以输出。
答案 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
)。