-
Notifications
You must be signed in to change notification settings - Fork 0
Object
Dmitry Ponyatov edited this page Jun 23, 2020
·
4 revisions
структура базового объекта (узла) выбиралась исходя из универсального представления знаний которое должно обеспечить
- унифицированное представление одновременно и любых данных, и методов их обработки (программы, алгоритмы),
- средства анализа и транформации (поиск, выборка по шаблону, правила преобразования)
- простую реализацию синтаксических анализаторов и кодогенераторов
- для разработки ПО и
- разгребания legacy кода (на любых языках программирования и управления проектами), а также
- чтения/записи текстовых ASCII форматов данных (САПР, форматы обмена, JSON/XML/...)
за основу была взята
- фреймовая модель
- Marvin Minsky A Framework for Representing Knowledge
- Марвин Минский Фреймы для представления знаний
- KR&R: Knowledge representation and reasoning
# Python
class Object:
def __init__(self, V):
# скалярное значение: имя объекта, строка/число,..
self.val = V
# слоты = атрибуты = ассоциативный массив = словарь (key/value)
self.slot = {}
# вложенные элементы = упорядоченный контейнер = вектор = список = очередь
self.nest = []
# уникальный глобальный id для хранения в БД или key/value хранилищах
self.gid = '%x' % id(self)
type Object* = ref object ### базовый тип узла объектного графа (фрейма)
val*: string ## скалярное значение: имя объекта / строка / число
slot*: Table[string, Object] ## слоты = атрибуты = словарь
nest*: seq[Object] ## вложенные элементы = AST = вектор = стек = очередь
gid*: uint64 ## глобальный идентификатор для key/value хранилища
Остальные типы узлов наследуются непосредственно от Object
или от абстрактных классов, группирующих типы и общее поведение для каждой группы. Наследование совершенно произвольное, в зависимости от конкретной решаемой задачи: какие-то понятия прикладной области, форматы данных, онтология, семантические сети и т.д.