正如标题所说,我需要编写一个程序,从列表中找到三个相等且连续的值,例如:
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.)。
任何帮助都非常感谢!提前致谢!
仅部分答案。使用事实上的标准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)
但从这里转到包含重复元素的列表应该很容易。