Prolog 程序能够找到三个连续和重复的值

nun*_*b99 5 prolog

正如标题所说,我需要编写一个程序,从列表中找到三个相等且连续的值,例如:

find([o,o,a,b,b,b,c,c], X)
X = [b,b,b].
Run Code Online (Sandbox Code Playgroud)

我的日常是函数式编程,但我对我的程序正在做的事情有些挣扎,因为它从不输出具体的结果(例如:输出X = [_7714,_7720,_7726])

我做的程序如下:

find(_List, X) :-
    length(X, Size),
    Size = 3,
    format('X = ~w', [X]).

find([Equal, Equal|Tail], X) :-
    is_list(X),
    append([Equal, Equal], X, Y),
    find([Equal|Tail], Y).

find([Equal, Equal|Tail], _X) :-
    append([Equal, Equal], [], Y),
    find([Equal|Tail], Y).

find([_Equal, Diferent|Tail], _X) :-
    find([Diferent|Tail], []).
Run Code Online (Sandbox Code Playgroud)

我在这里错过了什么或者我在序言理论中混淆了什么。对我来说,我的程序很有意义,我无法真正理解代码在每个步骤中的执行位置(即使使用trace.)。

任何帮助都非常感谢!提前致谢!

Pau*_*ura 1

仅部分答案。使用事实上的标准append/3谓词:

| ?- append(_Suffix, [X,X,X|_Prefix], [o,o,a,b,b,b,c,c]).

X = b ? ;

no
Run Code Online (Sandbox Code Playgroud)

但从这里转到包含重复元素的列表应该很容易。