gpt4 book ai didi

prolog - prolog 中列表的公共(public)子序列

转载 作者:行者123 更新时间:2023-12-02 04:32:12 25 4
gpt4 key购买 nike

我正在尝试编写一个谓词 common(L, S),它从列表 L 的列表中生成 S 中 L 中列表的所有公共(public)子序列。

subseq([], _).
subseq([H|S], L) :- append(_, [H|T], L), subseq(S, T).


common(L, X) :- not((
member(A, L),
not(subseq(X, A))
)).

即使输入错误,它也只会给我“真实”。

例如:

common([[1,2,3,4], [2,3], [12]], X).
真的

编辑

我注意到它确实有效,但它只是没有用谓词为真的术语替换 X。

最佳答案

子字符串是后缀的非空前缀。

substring_of(Ys, Xs) :-
Ys = [_|_], % a non-empty
append(_, Zs, Xs), % a suffix of Xs
append(Ys, _, Zs). % prefix of

common(Xss, Xs) :- % Xs is a substring of each element of Xss
maplist(substring_of(Xs), Xss).

?- common([[1,2,3,4], [2,3,4,5]], Xs).
Xs = [2]
; Xs = [2,3]
; Xs = [2,3,4]
; Xs = [3]
; Xs = [3,4]
; Xs = [4]
; false.

关于prolog - prolog 中列表的公共(public)子序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44737860/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com