我无法理解累加器和孔之间的区别。
形式上:
Accumulators
*Use 2 arguments to organize the building of some
output structure
*One is for result so far
*One is for final result
Holes
*Use 2 arguments to organize the building of some
output structure
*One is for final result
*One for a hole in the final result where further information can be put
这个扁平机是使用孔还是蓄电池? 如何将其转换为使用另一个?
my_flatten(In,[],Out).
my_flatten([],Acc,Acc).
my_flatten([H|T],Acc,Out) :-
my_flatten(T,Acc,TOut),
my_flatten(H,TOut,Out).
my_flatten(X,Acc,[X|Acc]) :-
X \= [],
X \= [_|_].
答案 0 :(得分:1)
累加器是用于递归以计算或构建诸如传统列表之类的结构的变量。孔用于差异列表(或其他差异结构),其中列表表示为一对术语,正面和背面。背部往往是变量或洞。通常使用中缀表示法,因此列表将是:
Front-Back
例如List = [a,b,c|Hole]-Hole
。
使用差异列表可以通过重新排列变量来追加时间。
差异表示法L-L
是空列表,[1|Z]-Z
是包含1的列表,[1,2,3|Z]-Z
是包含1,2和3的列表。您可以按以下顺序排列差异列表:用Y-[]
统一它。
在“条款和效果 - 由W.F.Clocksin”
中作为工作表28给出差异表示法的展平flatten(X,Y):-flatpair(X,Y-[]) %rectifying the list
flatpair([],L-L). %empty list
flatpair([H|T],L1-L3):-flatpair(H,L1-L2),flatpair(T,L2-L3).
flatpair(X,[X|Z]-Z).
这比使用累加器和构建部分列表或使用追加更有效。