DemonScript: Структуры данных
Строки
Строковые константы заключаются в двойные или одинарные кавычки. Их можно чередовать:
var S = "это 'простая' строка"
|
Строки можно складывать (конкатенация строк) и складывать с числом (оно преобразуется в строку).
Метод
.size() возвращает длину строки:
out "aaa" + "bbb"
out "aaa" + 5
out "aaa" .size()
|
Массивы
Массив - это список констант или переменных любых базовых типов.
Элементы массива заключаются в квадратные скобки и перечисляются через запятую:
var A = [1, 2, True ]
out A.type()
out A
out A[2]
A[0] = False
out A
out A.size()
|
К элементам массива возможен индексный доступ, в котором первый элемент имеет нулевой индекс.
Выше
A[2] возвращает третий элемент.
Элементы массива можно добавлять в массив и убирать их из него:
var A = []
A.push(1)
A.push(2, 3)
out A
out A.pop()
out A
|
Аналогично, при помощи методов
.unshift() и
.shift()
можно добавлять и извлекать элементы в начале массива. Элементы можно случайно перемешивать
методом
.mix().
Метод
.clear() очищает массив, а
.empty()
возвращает
True, если массив пустой.
Полный перечень методов см. в
справочнике.
Элементами массива могут быть другие массивы.
Это позволяет организовывать как двумерные
массивы, так и массивы любой размерности:
var A = [[1,2], [3,4]]
out A[0]
out A[0][1]
|
При присваивании переменных типа array происходит не копирование
данных, а передача ссылки на данные. Переменные ссылающиеся на один и тот же массив,
могут одновременно менять его элементы. Чтобы скопировать данные, необходимо вызвать метод .copy():
var A = [1,2,3]
var B = A
var C = A.copy()
B[0] = 0
C[0] = 4
out A,B,C
|
Логическое значение можно преобразовать в массив:
var X = (0.1, 0.8).array()
out X
|
Аналогично, при помощи
.logic() можно массив превратить в логическое значение.
При помощи цикла for можно перебирать элементы массива:
for X in [1, 2, 3]:
out X
|
Хэш-таблицы
Хэш-таблица или map является коллекций данных организованных по принципу ключ-значение.
В качестве ключа могут выступать любые типы, однако значение ключа должно быть уникальным.
Значение, соответствующее ключу также может быть любого типа и, в отличии от ключа, может повторяться.
Доступ к значениям по ключу осуществляется при помощи квадратных скобок:
var M = { "a" : 1, "b" : 2};
out M[ "a" ];
M[ "a" ] = 8;
out M
|
Элементы таблицы можно переберать при помощи оператора
for:
Если нужен и ключ и значение, то несколько быстрее будет работать следующая конструкция:
При помощи квадратных скобок, в хэш-таблицу можно также добавлять новые элементы:
var M = { };
M[ "a" ] = 1;
M[ "b" ] = [1,2, 3];
M[3.14] = True
out M
|
Нечёткие числа
Нечёткое число это некоторое вещественное значение и его возможный диапазон.
Например, если вес объекта примерно равен 50, но может также находиться в интервале от 30 до 60,
пишем:
var X = (30, 50, 60)
out X.type()
|
Предполагается, что
X=50 с максимальной (единичной) степенью уверенности,
а вне диапазона
30...60 значение
X не находится.
От
50 к
30 и
60 степень уверенности
спадает линейным образом (треугольное распределение).
Можно также использовать трапецевидные нечёткие числа, которые задаются четвёркой вещественных чисел:
В этом случае существует единичная уверенность, что число
Y
находится в интервале
40..50.
Треугольное нечёткое число является частным случаем трапецевидного числа.
Так,
X эквивалентно можно записать как
(30, 50, 50, 60).
На самом деле треугольные нечёткие числа хранятся как трапецевидные.
Доступ к диапазонам на чтение и запись производится при помощи квадратных скобок:
out X[0], X[1], X[2], X[3]
|
С нечёткими числами можно проводить стандартные арифметические операции:
out X + Y
out X - Y
out X * Y
out X / Y
|