【发布时间】:2014-02-03 23:36:04
【问题描述】:
我写了一个程序,它在 Prolog 列表中找到最长的互质子序列(它还没有完美):
longest_lcs([A, B | Tail],X) :- gcd(A,B,1),lcs([B | Tail],X,A,1).
longest_lcs([A, B | Tail],X) :- lcs([B | Tail],X,A,0).
lcs([],G,_,_) :- rev(G,G1),write(G1).
lcs([A, B | Tail],G,Q,_) :- gcd(B,Q,1), gcd(A,B,1), lcs([B | Tail], [Q | G], A, 1),!.
lcs([A, B | Tail],G,Q,_) :- gcd(B,Q,1);gcd(A,B,1), lcs([B | Tail], [Q | G], A, 0).
lcs([A, B | Tail],G,_,0) :- gcd(A,B,1), lcs([B | Tail], G, A, 1).
lcs([A, B | Tail],G,_,1) :- lcs([B | Tail], G, A, 1).
lcs([A, B | Tail],G,_,0) :- lcs([B | Tail], G, A, 0).
lcs([A],G,Q,_) :- gcd(Q,A,1),lcs([], [A, Q | G], _, _).
目前我输出带有write谓词的子序列,但我需要它以以下方式运行:
?- longest_lcs([1,2,3,4],X).
X = [1,2,3,4]
?- longest_lcs([2,4,8,16],X).
X = []
我需要进行哪些修改,这样才有效?
【问题讨论】: