【问题标题】:How I can add all the data in a knowledge base in Prolog?如何在 Prolog 的知识库中添加所有数据?
【发布时间】:2013-05-23 18:03:57
【问题描述】:

我需要有关 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........)我想要关于项目数量的组合知识库,不用手动输入变量。我该怎么做?

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

重量不超过的物品组合

电话、口红、镜子。 控制唇电话。 镜像,控制,唇形.......

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

【问题讨论】:

  • 你能把标题改成有意义的吗?
  • 如果您尝试过,请向我们展示您的尝试。现在听起来像是“请你们帮我做功课”。
  • 批发用新问题替换原始问题。优雅。
  • 是同一个问题,但有不同的例子,并解释了更多的标题。
  • 我们之前完全理解,我们只是想看看你自己走了多远。指出一些错误并不是作弊,而是一个完整的从头开始的解决方案,而且它也需要更多的工作。正如 Renan 所指出的,我们不是来为人们做功课的。您还刚刚放弃了 Diego Sevilla 的工作,将您笨拙的散文变成了易于理解的东西。现在有人将不得不对您的新问题再次执行此操作。这不是交朋友的好方法。

标签: prolog declarative


【解决方案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.

【讨论】:

  • 非常感谢,我做了一些递归能力调用谓词的事情,但他将上述项目作为参数传递,我所做的只是一个无限循环,如果您使用过列表,我感谢您的帮助但不知道如何申请。如果调查不会导致重复项目。
  • 你有没有想过如何让它在没有重复的情况下工作?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多