如何在prolog

时间:2016-05-14 14:53:47

标签: prolog

我被告知要做的是"旅行一个由结构和工人代表的工人名单(姓名,时间)" "

我想以这种形式返回一些内容:

couple(Worker1,Worker2,TI)

我觉得我或者在prolog中没有看过任何这样的例子,或者我错过了什么。就像,我知道返回列表,但不知道结构列表,这是我理解的必须做的事情。

这是可能的prolog?我可以得到一个例子,因为我不太明白吗?

总结:我想要一个所谓的结构列表,并返回一个结构,其中包含在所述结构列表中找到的元素对。我遗漏了我必须做的事情,现在选择哪一对专注于这个具体问题,但如果需要,我也可以发布它。

提前致谢。

1 个答案:

答案 0 :(得分:2)

Prolog实际上既没有返回值也没有结构,但你可以分别使用统一和复杂的术语来达到同样的效果。

您可以使用自由变量传递一个术语,例如couple(Worker1, Worker2, TI),让谓词用值设置这些变量。或者对于一个术语列表,传入一个空列表和另一个自由变量,并在每个递归步骤中附加一个新术语作为头部,然后在达到普通案例时,将自由变量与您构建的列表统一起来。

演示基本技术的一个非常简单的例子是:

% Trivial case: unify the built list with the Result variable.
make_worker_pairs([], Result, Result).

% Recursive case: if list has at least one worker, ...
make_worker_pairs([worker(Name, Time)|T], Accu, Result) :-
    % make a couple, append it to the intermediate result (Accumulator),
    % and process the rest (Tail) of the list.
    make_worker_pairs(T, 
                      [couple(worker(Name, Time), worker(Name, Time), Time)|Accu],
                      Result).

要打电话:

?- make_worker_pairs([worker(mike, 6), worker(laura, 9)], [], Result).