【问题标题】:Create a list in prolog from facts根据事实在序言中创建一个列表
【发布时间】:2015-03-09 17:43:35
【问题描述】:

我想根据以下事实创建一个列表:

table(mickel).
table(harris).
table(wolfgang).
table(yanis).
table(antti).
table(peter).
table(jeroen).
table(johan).
table(luis).
table(eric).

但我不想使用内置规则或谓词, 除非我自己定义它们。 结果几乎是这样的:

?- seats(Seats).
Seats = [yanis,antti,peter,jeroen,johan,luis,eric,michel,
harris,wolfgang]

我不知道该怎么办,请帮忙。

【问题讨论】:

  • 我认为你应该从看Prolog教程开始,特别注意列表处理示例(网上有some examples with source)。然后尝试解决您的问题,并展示您尝试过的方法以及遇到问题的地方。
  • 你说,“我不想使用内置规则或谓词,除非我自己定义它们”。你的意思是你想实现自己的 Prolog?

标签: prolog


【解决方案1】:

您必须创建自己的 findall 谓词,这个 post 可能会有所帮助:

seats(L) :- find([], L), !.

find(Acc, Loa) :- table(Y), uList(Y, Acc, AccNew), find(AccNew, Loa).
find(Acc, Acc).

uList(X, [], [X])  :- !.
uList(H, [H|_], _) :- !, fail.
uList(X, [H|T], [H|Rtn]) :- uList(X, T, Rtn).

咨询:

?- seats(L).
L = [mickel, harris, wolfgang, yanis, antti, peter, jeroen, johan, luis|...].

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-12
    • 1970-01-01
    • 2015-12-02
    • 1970-01-01
    • 2018-06-20
    • 2023-01-30
    • 2018-10-24
    相关资源
    最近更新 更多