遗传编程序言实现

问题描述 投票:0回答:1

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

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

prolog genetic-programming crossover
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).
© www.soinside.com 2019 - 2024. All rights reserved.