附加在Prolog和递归中

时间:2014-03-06 03:16:53

标签: recursion prolog

我目前正在Prolog中创建一个函数,它附加了另一个经过测试和运行的函数生成的数字。这是我的功能:

append([], Y, Y).
append([H|X], Y, [H|Z]) :- append(X, Y, Z).

function(A,[B|Bs],X):-
   oldNumber(A,B,Hold),
   append([Hold],function(A,Bs,X)).

所以我有一个正常工作的追加功能。然后我有一个函数,它是一个递归函数,它附加不同的数字。 oldNumber在Hold中输出一个数字,然后我将Hold放入追加的第一个插槽中。

以下是一个无效的示例:

 function([1.; -1.; 1.; -1.], [[0.; -1.; 1.; -1.], [-1.; 0.; -1.; 1.], [1.; -1.; 0.; -1][-1.; 1.; -1.; 0.]], X).
 Id be looking for [3.; -3.; 3.; -3.]

它返回false但我无法弄清楚原因。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

根据我在给出的示例中看到的内容,oldNumber执行了此question中要求的内容。

如果是这种情况,您需要以下代码:

function(_,[],[]).
function(A,[B|Bs],[X|Xs]):-
   net(A,B,X),
   function(A,Bs,Xs).

net([],_,0).
net(_,[],0).
net([I|Is], [W|Ws], Sum) :-
    net(Is, Ws, Acc),
    Sum is Acc + I * W.

让我向你解释一下:

您正在制作Xs的列表,其中每个X正在应用oldNumber,然后转到下一个...

因此,您指定function(A,[B|Bs],[X|Xs]),因为您将设置X,然后处理列表的其余部分(Xs)。

您可以使用X获取此oldNumber(A,B,X)X绑定两个Xs

然后通过递归使用function(A,Bs,Xs)来处理列表的其余部分(Bs)。

现在,当function(A,[],[])的列表为空function([1,2,3],[[1,1,1],[2,2,2],[3,3,3]],X). X = [6, 12, 18] . 时,您只需处理基本情况


现在举个例子:

{{1}}