Prolog 列表元素的邻居
Prolog List Neighbour of a Element
序言列表有问题。我想做这个:
[1,2,3,4,5]
[5,6,9,12,10]
你取一个数字,例如 3,你对它的邻居做一个加法运算,所以运算结果是 2+3+4 = 9。你假设第一个和最后一个元素那里有一个虚数 1。
我现在有这个:
sum_list([A,X,B|T], [Xs|Ts]):-
add(A,X,B,Xs),
sum_list([X,B|T], Ts).
我没有考虑第一个和最后一个元素。我的问题是我不知道如何获取之前和下一个元素,然后如何继续。
注意:我不允许使用元谓词。
谢谢。
我不确定你是如何计算前 5 个的。后 10 个是 4 + 5 + 隐含的 1。但是在计算之后,你的结果的第一个元素应该是 4 而不是 5?
无论如何,就编写这段代码而言,这并不重要。您实际上已经接近您想要的结果。当然有多种方法可以解决这个问题,但我认为最简单的方法是编写一个小的 'initial' 案例,其中您已经计算了第一个总和,然后递归计算所有其他总和。然后我们可以写一个例子,只剩下2个元素来计算最后的'special'和:
% Initial case for easily distinguishing the first sum
initial([X,Y|T],[Sum|R]) :-
Sum is X+Y+1,
others([X,Y|T],R).
% Match on 2 last elements left
others([X,Y],[Sum|[]]) :-
Sum is X+Y+1.
% Recursively keep adding neighbours
others([X,Y,Z|T],[Sum|R]) :-
Sum is X+Y+Z,
others([Y,Z|T],R).
执行:
?- initial([1,2],Result)
Result = [4,4]
?- initial([1,2,3,4,5],Result)
Result = [4, 6, 9, 12, 10]
请注意,我们现在(还)没有任何空列表或只有一个元素的列表的案例。如有必要,这仍然需要涵盖。
序言列表有问题。我想做这个:
[1,2,3,4,5]
[5,6,9,12,10]
你取一个数字,例如 3,你对它的邻居做一个加法运算,所以运算结果是 2+3+4 = 9。你假设第一个和最后一个元素那里有一个虚数 1。
我现在有这个:
sum_list([A,X,B|T], [Xs|Ts]):-
add(A,X,B,Xs),
sum_list([X,B|T], Ts).
我没有考虑第一个和最后一个元素。我的问题是我不知道如何获取之前和下一个元素,然后如何继续。
注意:我不允许使用元谓词。
谢谢。
我不确定你是如何计算前 5 个的。后 10 个是 4 + 5 + 隐含的 1。但是在计算之后,你的结果的第一个元素应该是 4 而不是 5?
无论如何,就编写这段代码而言,这并不重要。您实际上已经接近您想要的结果。当然有多种方法可以解决这个问题,但我认为最简单的方法是编写一个小的 'initial' 案例,其中您已经计算了第一个总和,然后递归计算所有其他总和。然后我们可以写一个例子,只剩下2个元素来计算最后的'special'和:
% Initial case for easily distinguishing the first sum
initial([X,Y|T],[Sum|R]) :-
Sum is X+Y+1,
others([X,Y|T],R).
% Match on 2 last elements left
others([X,Y],[Sum|[]]) :-
Sum is X+Y+1.
% Recursively keep adding neighbours
others([X,Y,Z|T],[Sum|R]) :-
Sum is X+Y+Z,
others([Y,Z|T],R).
执行:
?- initial([1,2],Result)
Result = [4,4]
?- initial([1,2,3,4,5],Result)
Result = [4, 6, 9, 12, 10]
请注意,我们现在(还)没有任何空列表或只有一个元素的列表的案例。如有必要,这仍然需要涵盖。