Всё таки имя в каждом объекте наверное необходимо, а точнее идентификатор имени, т.е.Shaos wrote:Решил для начала попробовать сделать интерпретатор гибрида Hope+Prolog на языке JavaScript - входными данными для интерпретатора будут не текст программы или байт-код, а некая иерархическая структура в виде родной для джава-скрипта JSON-нотации. На верхнем уровне это будет массив, состоящий из объектов, описывающих определения типов данных и функции языка Hope, которые внутри будут также представлять из себя иерархические структуры вложенных объектов.
Возможная структура объекта:
{
"T":M, // где M - тип объекта
"O":тело-объекта // может быть null, число, массив, объект
}
Возможные значения типа:
0 - nothing
1 - use (подключение модуля): массив строк
2 - library (список атомов, использованных в коде): массив строк
3 - data (определение нового типа данных): массив объектов
4 - call (вызов функции): массив объектов
5 - dec (определение функции): объект с полями A (число) и D (массив объектов)
6 - special (специальные команды): строка
7 - lambda (определение безымянной функции): массив из двух элементов
8 - if/then/else: массив из трёх элементов
9 - let/in и where (а также letrec и whererec): массив из трёх элементов
10 - type (тип): число - идентификатор атома
11 - cons (простой конструктор): идентификатор атома
12 - cons(...) (сложный конструктор): объект с полями A (число) и O (объект)
13 - tuple (набор элементов): массив объектов
14 - num (число): число
15 - char (буква): число - код символа
...
{
"t":M, // где M - тип объекта
"a":N, // где N - идентификатор имени объекта (может быть null там где неприменимо)
"o":тело-объекта // может быть null, число, массив, объект
}