我被告知要做的是"旅行一个由结构和工人代表的工人名单(姓名,时间)" "
我想以这种形式返回一些内容:
couple(Worker1,Worker2,TI)
我觉得我或者在prolog中没有看过任何这样的例子,或者我错过了什么。就像,我知道返回列表,但不知道结构列表,这是我理解的必须做的事情。
这是可能的prolog?我可以得到一个例子,因为我不太明白吗?
总结:我想要一个所谓的结构列表,并返回一个结构,其中包含在所述结构列表中找到的元素对。我遗漏了我必须做的事情,现在选择哪一对专注于这个具体问题,但如果需要,我也可以发布它。
提前致谢。
答案 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).