Prolog-使用追加返回单个列表

时间:2020-04-04 19:02:00

标签: prolog

写一个谓词三角形(Bs,Ds),其中Bs是foo位置的列表,而Ds是位置差的(单个)列表。使用内置谓词追加和您自己的距离谓词。

这与以下问题有关: Build a list with abs() in prolog

distances([], _, []).
distances([H|T], B, [D|Ds]) :- abs(H - B, D), distances(T, B, Ds).

triangle([],[]).
triangle([H|T], [D|Dt]) :-  distances(T,H,D), triangle(T,Dt).


?- triangle([1,2,3],A).
A = [[1, 2], [1], []].

我需要的解决方案

?- triangle([1,2,3],A).
A = [1,2,1].

答案是正确的,但它在列表列表中。

我无法将Ds转换为单个列表。我尝试在谓词中的各个位置使用append,但是要么得到重复,要么谓词的计算结果为false。我如何将Ds附加到带有附件的单个列表[1,2,3]中?

1 个答案:

答案 0 :(得分:1)

您可以在列表D后面加上Dt,而不要使用[D|Dt],在列表中添加一个元素D

triangle([],[]).
triangle([H|T], Ds) :-
    distances(T, H, D),
    append(D, Dt, Ds),
    triangle(T, Dt).