这可以将对象的名称作为变量来获取吗?我试图建立一个数据库,其中每个对象代表每个人。我有名字/1,姓/1的对象,但是当我问。
X::姓名(约翰)
这给了我一个错误。Ofc使用这种方法获取原子没有问题:
object_id::name(X).
发布于 2018-12-17 18:06:31
在调用时,::/2消息发送控件构造确实需要一个绑定的第一个参数。但是,可以使用current_object/1内置谓词枚举现有对象:
| ?- current_object(Person), Person::name(john).
...但是,此解决方案也可能导致错误,因为我们将通过回溯枚举所有对象,而且并不是所有对象都会理解name/1消息。因此,更好的解决方案是只枚举了解name/1消息的对象。假设表示一个人的所有对象(直接或通过继承)实现一个person_protocol,我们可以使用conforms_to_protocol/2内置谓词:
| ?- conforms_to_protocol(Person, person_protocol),
Person::name(john).
...详情请参见3.html。
https://stackoverflow.com/questions/53811729
复制相似问题