gpt4 book ai didi

list - Prolog - 为什么变量没有被绑定(bind)?

转载 作者:行者123 更新时间:2023-12-02 06:19:39 26 4
gpt4 key购买 nike

我定义了一个目标 lowerpartition/3 如下:

lowerpartition(X,P,Z) :- var(Z),!,lowerpartition(X,P,[]).
lowerpartition([],_,_).
lowerpartition([X|Xs],P,Z) :- X=<P, lowerpartition(Xs,P,[X|Z]).
lowerpartition([X|Xs],P,Z) :- X>P, lowerpartition(Xs,P,Z).

当我打电话

lowerpartition([1,2,3,4,5],3,X).

我希望 X 绑定(bind)到列表 [3,2,1],但 Prolog 只返回 false。我做错了什么?

最佳答案

您似乎将基于累加器的方法与基于堆栈的方法混合在一起。你的第一个条款:

lowerpartition(X,P,Z) :- var(Z),!,lowerpartition(X,P,[]).

将保留 Z 未实例化,在检查它是一个变量后不使用它,因此它不会被统一...

试试这个:

lowerpartition([], _, []).
lowerpartition([X|Xs], P, [X|Zs]):-
X =< P, lowerpartition(Xs, P, Zs).
lowerpartition([X|Xs], P, Zs):-
X > P, lowerpartition(Xs, P, Zs).

关于list - Prolog - 为什么变量没有被绑定(bind)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14042320/

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