如何在 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).
肯定有更好的解决方法。
我有 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).
肯定有更好的解决方法。