如何在 Prolog 的列表中合并给定的事实

How to merge given Facts in a List in Prolog

我有 3 个事实。

myfact1(1,'Hamburg','Berlin', 315).
myfact2(2,'Kiel','Bremen', 175).
myfact3(3,'Essen', 'Oberhausen',50).

我想将 myfacts 的信息作为列表的元组。我的查询 output(List) 应该给出如下列表:

[('Hamburg', 'Berlin', 315),('Kiel','Bremen',175),('Essen','Oberhausen',50)]

如何在 Prolog

中实现规则 output/1

我不知道我是否理解正确,但我会将事实更改为 "myfact" 而不是 myfact1。在那种情况下:

output(List) :-
    findall(myfact(A,B,C,D),myfact(A,B,C,D),List).

如果你真的想保留 myfacts1,... :

output(List) :-
    myfact1(A1,A2,A3,A4),
    myfact2(B1,B2,B3,B4),
    myfact3(C1,C2,C3,C4),

    append([myfact1(A1,A2,A3,A4),myfact2(B1,B2,B3,B4),myfact3(C1,C2,C3,C4)],[],List).

肯定有更好的解决方法。