gpt4 book ai didi

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

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

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

find([o,o,a,b,b,b,c,c], X)
X = [b,b,b].
我的日常是函数式编程,但我对我的程序正在做的事情有些挣扎,因为它从不输出具体结果(例如:输出 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], []).
我在这里错过了什么或者我在序言理论中混淆了什么。对我来说,我的程序很有意义,我无法真正理解每一步中代码在哪里执行(即使使用 trace. )。
任何帮助都非常感谢!提前致谢!

最佳答案

triple(X) --> [X,X,X].

... --> [] | [_], ... .

find(Xs, X) :-
phrase(( ..., triple(X), ... ), Xs).

find2(Xs, X) :-
phrase(( ..., [X,X,X], ... ), Xs).
请注意,像 find/2 这样的名称不太适合描述性思维方式,因为它暗示了一个可操作的观点,这将妨碍您对 Prolog 的理解。因此,与其发出诸如“查找该序列”之类的命令,不如简单地描述它是什么,通常更可取。

关于Prolog 程序能够找到三个连续和重复的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64863055/

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