我目前正在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但我无法弄清楚原因。有什么想法吗?
答案 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}}