首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PyClips:创建包含对其他clips实例的引用的多槽/多字段

PyClips:创建包含对其他clips实例的引用的多槽/多字段
EN

Stack Overflow用户
提问于 2015-12-12 18:19:36
回答 1查看 220关注 0票数 0

一个人可以拥有几辆汽车,但一辆汽车恰恰是由一个人拥有的。剪辑中

代码语言:javascript
复制
(defclass PERSON
    (is-a USER)
    (role concrete)
    (pattern-match reactive)
    (multislot cars) ; each list element should be a reference to an instance of type CAR
)

(defclass CAR
    (is-a USER)
    (role concrete)
    (pattern-match reactive)
    (slot owner) ; should be a reference to an instance of type PERSON
)

我用的是弹夹。现在我想将一个现有的CAR实例链接到一个现有的PERSON实例中。我的尝试:

代码语言:javascript
复制
clips_person_instance = clips.FindInstance(name_of_existing_person)
clips_car_instance = clips.FindInstance(name_of_existing_car)

list_of_cars = clips_person_instance.Slots["cars"]
list_of_cars.append(clips_car_instance)
clips_person_instance.Slots["cars"] = list_of_cars

这给了我

TypeError:无法转换<class 'clips._clips_wrap.Instance'>类型的列表元素

据我所见,这是一个问题,让pyclips将实例列表添加到一个插槽中。如果它只是一个实例(没有列表),那么它可以很好地工作:

代码语言:javascript
复制
clips_car_instance.Slots["owner"] = clips_person_instance

我的问题:如何“链接”到(Py)剪辑中的类实例?在OO中:如何在两个对象之间创建一个关联?如何在(Py)剪辑中创建"1到多“关系?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-13 19:05:00

在python代码中,事实和实例地址似乎与其他CLIPS原始数据类型一样不完全受支持。我建议将实例名称而不是实例地址存储在多字段值中(在本例中,使用clips_car_instance.Name而不是clips_car_instance)。您必须使用FindInstance将实例名称转换回实例地址来操作实例。

代码语言:javascript
复制
>>> import clips
>>> clips.Load("classes.clp")
>>> clips.Eval("(make-instance Fred of PERSON)")
<InstanceName 'Fred'>
>>> clips.Eval("(make-instance Toyota of CAR)")
<InstanceName 'Toyota'>
>>> name_of_existing_person = "Fred"
>>> name_of_existing_car = "Toyota"
>>> clips_person_instance = clips.FindInstance(name_of_existing_person)
>>> clips_car_instance = clips.FindInstance(name_of_existing_car)
>>> list_of_cars = clips_person_instance.Slots["cars"]
>>> list_of_cars.append(clips_car_instance.Name)
>>> clips_person_instance.Slots["cars"] = list_of_cars
>>> clips_person_instance.Slots["cars"]
<Multifield [<InstanceName 'Toyota'>]>
>>> 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34243332

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档