Флора-2 алмазное наследование

Флора-2 - эксцентричный язык, и я знаю, что это длинный путь, но я не нашел активных ресурсов, посвященных этому, поэтому я пытаюсь здесь. Это так популярно... для него нет тега stackru. Если вы знаете что-нибудь о состоянии и будущем Flora-2 и XSB Prolog, я бы тоже хотел это услышать.

Может кто-нибудь объяснить мне правила наследования алмазов Флоры-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 считается, что конфликт имеет место, если есть два не перезаписанных определения одного и того же метода, прикрепленных к двум разным суперклассам. При принятии решения о наличии конфликта мы игнорируем аргументы метода. Например, в

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 ответа

Наткнулся на это через 2 с лишним года после того, как был задан вопрос. Вы должны были спросить об этом в списке рассылки flora-users.

Во всяком случае, это, похоже, ошибка в этой версии Flora-2. Я вижу, что текущая версия дает правильный ответ

? X = o

? Y = F

?Z = г

Таким образом, два конфликтующих наследования уничтожили друг друга, как описано в руководстве.

Я не знаком с синтаксисом Flora-2, но у меня есть забавный пример хорошо известной проблемы наследования алмазов в Logtalk. Вы можете найти это здесь:

https://github.com/LogtalkDotOrg/logtalk3/tree/master/examples/diamonds

См. NOTES.txt и комментарии к исходному файлу для получения информации о семантике, правилах наследования по умолчанию и переопределении пользователем правил наследования по умолчанию. Вы можете запустить пример, используя последнюю версию CVS XSB. См. Файл SCRIPT.txt для примеров запросов.

Другие вопросы по тегам