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.