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

时间:2015-10-29 21:14:43

标签: prolog

我有3个事实。

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

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

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

如何在Prolog中实施规则output/1

1 个答案:

答案 0 :(得分:0)

我不知道我是否理解它,但我会将事实改为" 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).

当然有更好的解决方法。