我想写一个谓词,它将从我的列表中获取每个元素,而其他元素则不会重复。
示例:
?- predicate([2,3,5,6],X).
X = [6,10,12,15,18,30]. % expected result
?- predicate([1,6,10],X).
X = [6,10,60]. % expected result
我正在尝试这样的事情,但我不知道如何升级此代码:
predicate([],[]).
predicate([_|[]],[]) :-
!.
predicate([H,S|T],[V|X]) :-
V is H*S,
predicate([H|T],X).
答案 0 :(得分:1)
以下是您描述的结果:
predicate(Xs, Ys):-
aggregate_all(
set(Y),
(
member(X1, Xs),
member(X2, Xs),
X1 =\= X2,
Y is X1 * X2
),
Ys
).
请注意,aggregate_all/3
是来自library aggregate
的非标准谓词。有些替代实现使用ISO谓词bagof/3
。