gpt4 book ai didi

list - Prolog中的前缀

转载 作者:行者123 更新时间:2023-12-05 01:00:07 25 4
gpt4 key购买 nike

我是 Prolog 的新手。
我有一个关于谓词前缀的问题,但有点不同。

我想获得一个列表的前缀,但直到一个元素
列表可以有重复元素。

一个例子:

prefix(Element, List, Prefix)
prefix(c, [a,b,c,d,e,f], [a, b])

不包括该元素。

到目前为止我所拥有的是这个
prefix(X, [X|T], []).
prefix(X, [Y|T], [Y|Z]):-
prefix(X, T, Z).

但它不起作用。
L = [a,b,c] ? prefix(b, L, Prefix).

no
?-

谢谢

最佳答案

dif/2 您可以明确声明对于任何成员 XElement , X \== Element :

prefix(Element, [Element|_], []).
prefix(Element, [Head|List], [Head|Prefix]) :-
dif(Element, Head),
prefix(Element, List, Prefix).

或者同样,因为我想使用 append/3 在我的答案的第一次迭代中:
prefix(Element, List, Prefix) :-
append(Prefix, [Element|_Suffix], List),
maplist(dif(Element), Prefix).

对于后缀,它基本上是相同的:
suffix(Element, List, Suffix) :-
append(_Prefix, [Element|Suffix], List),
maplist(dif(Element), Suffix).

如果您不想使用 maplist(dif(Element), List) :
all_dif(_, []).
all_dif(X, [H|T]) :- dif(X, H), all_dif(X, T).

关于list - Prolog中的前缀,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30126737/

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