gpt4 book ai didi

prolog - 在序言中获取单例警告(面额更改)

转载 作者:行者123 更新时间:2023-12-04 02:16:05 26 4
gpt4 key购买 nike

我正在编写一个序言谓词来打印给定值的可能更改,在运行时它会显示一条警告,指出 X2 是一个单例变量。 X 是给定值,T 是给定的可用面额列表,L 是结果列表。

例如:改变(100,[1,2,5,10],L).

change(X,T,L) :-
change1(X,T,[],L).
change1(X,[H|T],AC,L):-
X > 0,
X >= H,
X2 is X-1,
change1(X2,T,[H|AC],L);
change1(X2,[H|T],[H|AC],L);
change1(X,T,AC,L).
change1(0,_,AC,AC).
change1(X,[],_,_):-X \= 0,false.

最佳答案

您收到单例 警告,因为逗号, 的优先级高于;,因此代码的有效分组是:

change1(X,[H|T],AC,L):-
( X > 0,
X >= H,
X2 is X-1,
change1(X2,T,[H|AC],L)
)
; change1(X2,[H|T],[H|AC],L)
; change1(X,T,AC,L).

(注意括号)将 change1(X2,[H|T],[H|AC],L) 与可能实例化 X2 的任何查询隔离开来。所以 X2 在那个上下文中是单例的。你的意思可能是:

change1(X,[H|T],AC,L):-
X > 0,
X >= H,
X2 is X-1,
( change1(X2,T,[H|AC],L)
; change1(X2,[H|T],[H|AC],L)
; change1(X,T,AC,L)
).

关于prolog - 在序言中获取单例警告(面额更改),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33569940/

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