Флора-2 алмазное наследование - PullRequest
4 голосов
/ 02 апреля 2011

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

Может кто-нибудь объяснить правила наследования алмазов 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 или без него)

В руководстве говорится:

На уровне методовПри арности> 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 голосов
/ 30 января 2014

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

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

? X = o

? Y = f

? Z = g

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

1 голос
/ 03 апреля 2011

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

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

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

...