我的任务是在SWI Prolog中编写一条规则,该规则将两个字符串作为输入。然后,它应该在一个随机点上进行划分和合并,并生成两个新列表。
示例:
?- crossover([a,r,s,u,p],[b,t,c,z,k],NewList1,NewList2).
NewList1 = [a,r,s,z,k]
NewList2 = [b,t,c,u,p]
我不知道如何在随机点分割列表,然后从那里生成两个新列表。在此先感谢可以提供帮助的任何人! :)
这是对我有用的东西
split_at(X,I,Left,Right) :-
length(Left,I),
append(Left,Right,X).
crossover(X,Y,Z1,Z2) :-
length(X,Len),
random_between(0,Len,Cut),
split_at(X,Cut,X1,X2),
split_at(Y,Cut,Y1,Y2),
append(X1,Y2,Z1),
append(Y1,X2,Z2).