are_different(List1,List2):-
nth0(0,List1,Slot1),
nth0(0,List2,Slot2),
Slot1\==Slot2.
fillSchedule([30,_,_,_,_,_,__],S).
fillSchedule([H|T],[H1|T1]):-
are_different(H,H1),
H1 = H,
fillSchedule(T,T1).
fillSchedule([H|T],L):-
fillSchedule(T,L).
大4170元素列表中的列表采用以下形式
[1,A,B,C,D,E,F],[1,A1,B1,C1,D1,F1].......[5,_,_,_,_,_,_].....[30,_,..]
每个列表都以某种方式与其他列表不同但不是第一个元素(1),(2)等,这是最重要的因素。我希望作为填充计划谓词列表的一个可能的解决方案由第一个大清单中提取的30个元素组成,如[[1,...],[2,...],[3,...] etc till 30
,谓词的下一个解决方案应该包含另一个列表,其中包含30个元素,但每个元素与前30个元素不同,依此类推,直到我们不再有从原始4170元素中选择的元素
答案 0 :(得分:1)
答案 1 :(得分:0)
这是另一种方法:
fillSchedule(InL, OutL):-
numlist(1, 30, Heads),
fillSchedule(Heads, Heads, InL, [], OutL).
fillSchedule([], _, _, OutL, OutL).
fillSchedule([], Heads, InL, _, OutL):-
fillSchedule(Heads, Heads, InL, [], OutL).
fillSchedule([Item|TailHeads], Heads, InL, MedL, OutL):-
select([Item|Rest], InL, NInL),
% !, This cut would prevent combinations
fillSchedule(TailHeads, Heads, NInL, [[Item|Rest]|MedL], OutL).
它使用头部构建一个列表,然后从输入列表中选择具有头部中每个项目的项目。如果您取消注释,评论的剪辑会阻止组合。