gpt4 book ai didi

prolog - Flora-2 钻石传承

转载 作者:行者123 更新时间:2023-12-01 02:50:06 25 4
gpt4 key购买 nike

Flora-2 是一种古怪的语言,我知道这是一个很长的尝试,但我还没有找到任何致力于它的活跃资源,所以我在这里尝试。它如此受欢迎......它没有stackoverflow标签。如果您对 Flora-2 和 XSB Prolog 的状态和 future 有所了解,我会 听到这个,也是。

有人可以向我解释 Flora-2 菱形继承(钻石问题)规则吗?该手册有一个示例,但没有显示示例的结果。措辞似乎与我在解释器和 diamond.flr 演示中看到的相反。这是演示:

c[f*->g].
c1[f(a)*->a]::c.
c2[f(b)*->b]::c.
o:c1.
o:c2.

?- ?X[?Y->?Z].

(无论有没有基类 c,我看到的都会发生)

手册说:

在 arity > 1 的方法级别,如果有两个未覆盖的相同方法的定义附加到两个不同的父类(super class),则认为发生了冲突。在决定是否发生冲突时,我们忽略方法的参数。例如,在
a:c. c[m(k)*->f]. a:d. d[m(u)*->f].

即使在一种情况下将方法 m 应用于对象 k,而在另一种情况下将方法应用于对象 u,也会发生多重继承冲突。

(我很确定他们的意思是 arity >= 1 但结果对于 arity 2 也是相似的)

所以我认为这意味着 f 的继承存在冲突,因此它是未定义的(尽管我对“未定义”的含义有些困惑,但在相关部分中它说“没有发生继承”)。这是我运行钻石时得到的结果:
?X = o
?Y = f
?Z = g

?X = o
?Y = f(a)
?Z = a

我只期望第一个解决方案,尽管我认为如果第二个解决方案也有解决方案,它至少会有意义
?X = o
?Y = f(b)
?Z = b

......但它没有。

仅供引用,我正在使用最新的稳定 XSB 和最新的 Flora-2 版本... 0.95。

最佳答案

在提出问题后的 2 年多时间里偶然发现了这个问题。您应该在flora-users 邮件列表中询问它。
无论如何,这似乎是那个版本的 Flora-2 中的一个错误。我看到当前版本给出了正确的答案

?X = o

?Y = f

?Z = g


也就是说,正如手册所描述的,这两个相互冲突的继承相互抵消了。

关于prolog - Flora-2 钻石传承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5519608/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com