0

我需要有关 Prolog 练习的帮助:

% items
items (cell).
items (labial).
items (control).
items (mirror).

% Weight of each item
weight (cell 2).
weight (labial, 3).
weight (control, 5).
weight (mirror, 10).

capacity (X, Y, Z, V) :-
    weight (X C1), weight (Y, C2), weight (Z, C3), sum (C1, C2, C3, R), V> = R.

sum (X, Y, Z, K) :- K is X + Y + Z.

这个程序确实是给我一个给定重量的 3 个或更少的组合,例如容量 (X, Y, Z, 15)。

结果是,X:细胞,Y:口红,Z:镜子,X:对照,Y:细胞,Z:镜子。依次使用所有组合,其中 3 个权重的总和没有更高的输入。

目前我受到手动收入变量数量的限制,容量(X,Y,Z,N........)我想要关于知识库中项目数量的组合,不手动输入变量。我怎么能这样做?

理想的容量(重量)和响应也是如此。

重量不超过的物品组合

手机、口红、镜子。控制唇电话。镜像,控制,labilal .......

对不起,我不会说英语,我正在使用谷歌翻译。

4

1 回答 1

1

看起来您要查找的结构是一个列表,您应该查找它([HD:TL],其中 TL 是一个列表)。我在下面提供的解决方案应该显示如何使用列表来达到预期的效果,尽管我的解决方案允许重复并且不关心列表的顺序。如果这是为了家庭作业,一旦您对列表有所了解,您应该能够弄清楚如何自己解决这个问题。

基本上,第一个谓词处理长列表项,HD 是一个权重为 X 的项,它寻找一个谓词来定义尾(TL)列表;第二个处理列表的结尾(TL 在前面的归纳步骤中是 [])和空列表(因为即使是空列表也需要爱)。

items(cell).
items(labial).
items(control).
items(mirror).
weight(cell,2).
weight(labial,3).
weight(control,5).
weight(mirror,10).
capacity(W, [HD|TL]) :- items(HD),weight(HD,X),W>0,capacity(W-X,TL). 
capacity(W, []) :- W>=0.
于 2013-05-23T22:36:57.150 回答