2
A DisjointSet is a kind of Object.
A DisjointSet is a part of every DisjointSet.

尝试在 Inform 7 中启动 DisjointSet 对象,但即使我知道它可能会导致无限循环,我还是想这样做,原因很明显,它是算法的一部分。

这是错误

你写了“A DisjointSet is a part of each DisjointSet”:但是这种概括太危险了,因为它会导致组装过程中的无限倒退。有时,如果您使用诸如“每个容器中都有一个容器”之类的文本设置问题,就会发生这种情况。

我想在 Inform 6 中做这样的事情会更容易,但我对此一无所知,所以我试图避免它。但也会接受 Inform 6 中的帮助。

编辑以下@jeroen-mostert 建议:

也许我做错了,但也许一些示例代码可能会有所帮助。

A DisjointSet is a kind of Container.
A DisjointSet always contains a DisjointSet called the Parent.
The First Decl is a DisjointSet.
The Second Decl is a DisjointSet.
The Parent of the First Decl is the Second Decl. [This line doesn't work.]

'The Parent of the First Decl is the Second Decl' 这句话
似乎说两件事是一样的 - 我正在阅读 'Parent of the First Decl' 和 'Second Decl' 作为两个不同的东西,因此没有意义说一个是另一个:这就像说“圣彼得就是圣保罗”。如果第二件事是一个种类的名称,也许还有属性,那就没问题了:例如,“Pearly Gates is a lighted room”说存在一种叫做 Pearly Gates 的东西,它是一个“房间”,它是一种我知道,再加上我也知道的一个名为“lighted”的属性。

4

1 回答 1

1

我会给出两个答案。首先,你问的问题:

Inform 7 中的链表

问题在于它包含并且指示物理概念的一部分。当您使用这些词时,Inform 认为您在谈论虚构宇宙中的物质,就好像您说“每个桶都包含一个桶”。

相反,定义您自己的与 Inform 的物理世界模型无关的属性:

每个 DisjointSet都有一个称为 Parent 的 DisjointSet。

通过此更改,您的代码可以正常工作。

现在回到你没有问的问题:

群体关系

如果您想要的是一组对象,其中这些集合都是不相交的,请使用等价关系:

友谊使人们在群体中相互联系。

这定义了一种称为“友谊”的关系,它将所有动物划分为不相交的集合,使得动物与该集合中的其他动物成为朋友,而不是与任何其他动物成为朋友。

然后你必须教 Inform 一些词汇:

动词to be friends with表示友谊关系。

之后,短语“X 是 Y 的朋友”意味着 X 和 Y 在同一个友谊集中。您可以说“现在獾和巨型鱿鱼成为朋友”之类的话来更新套装。

请参阅手册中的“组中的关系”。

于 2020-03-09T14:11:13.087 回答