0

我的任务是在 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]

我不知道如何在随机点拆分列表,然后从那里生成两个新列表.. 非常感谢任何可以提供帮助的人!:)

4

1 回答 1

1

这是对我有用的东西

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).
于 2020-05-14T15:37:25.017 回答