- •Организация данных. Символы. Строки.
- •Доступ к массиву( матрице) [ ]
- •Создание символов из нескольких строк (concat)
- •Получение значения символа
- •Использование оператора точка для доступа к свойствам символа
- •Будьте осторожны!
- •Строки(String)
- •Сложение входных строк с указанием количества литер для сложения
- •Сравнение строк
- •Структуры, определяемые пользователем
Лекция 2.
Организация данных. Символы. Строки.
Операторы доступа в SKILL
Некоторые операторы доступа имеют характерный тип (вид). То есть синтаксис доступа к различным типам данных может быть одинаковым.
Оператор “стрелка” (->)
Применяется для доступа к свойствам ассоциативных таблиц, списков, структур, определяемых пользователем и др. Свойства, к которым осуществляется доступ этим оператором, всегда должны быть символами, значения которых могут быть любым типом данных SKILL.
Оператор “волнистая стрелка” (~>)
Этот оператор является обобщением обычной стрелки. Кроме доступа непосредственно к объекту с помощью этого оператора также можно осуществить доступ к списку подобных объектов. В этом случае оператор «стрелка» будет применён к каждому элементу списка.
Доступ к массиву( матрице) [ ]
Данный синтаксис может быть использован для доступа к:
элементам матрицы
паре значений в ассоциативной таблице.
Символы (Symbol)
В SKILL символы играют ту же роль, что и переменные в С. Часто термины “символ” и “переменная” подменяют друг друга; при этом символы в SKILL могут быть использованы и для других целей. Каждый символ обладает следующими составляющими:
имя
значение
функциональное выражение
список свойств.
За исключением имени, остальные свойства являются необязательными (могут быть пустыми). Не рекомендуется одновременно задавать символу значение и функциональное выражение.
Создание символов
Система создает символ всякий раз когда впервые встречает текстовую ссылку на символ. Когда система создает новый символ, его значение задается как unbound. Обычно нет необходимости явно создавать символы, но в некоторых случаях это необходимо.( Например, задать значение по умолчанию)
Создание символов с заданным именем с помощью функции gensym():
Система определяет индекс (указатель), прикрепляемый к базовому (заданному) имени для того, чтобы убедиться, что символ новый.
gensym([ S_arg ])
Возвращает новый символ исходя из входного аргумента. Печатное имя нового символа получается в результате объединения печатного представления аргумента, или “G”, если аргумент не задан, и десятичного представления числа. Возвращаемый символ уникален, то есть не существует в момент вызова функции. Значение символа по умолчанию unbound.
Пример:
gensym() => G5
gensym(“test”) => test6
test7=10
gensym(“test”) => test8 так как test7 уже существует.
num - это символ.
num = 5 ; = - знак присвоения.
=> 5 ; возвращается значение 5.
‘ - обращение к знаковому изображению символа,
а = ‘num ;возвращает не 5, а num
a => num
Создание символов из нескольких строк (concat)
concat(Sx_arg1[ Sx_arg2 ... ])
Складывает строки, символы или целые числа в единый символ. Эта функция полезна для преобразования строк в символы. Для складывания нескольких строк в единую строку используйте функцию strcat. Имя символа ограничено 255 знаками.
Символьные функции eq, memq, caseq и др. работают гораздо быстрее, чем их аналоги member, case, equal, так как они сравнивают указатели, а не данные. Для увеличения быстродействия вы можете использовать функцию concat для преобразования строки в символ перед выполнением memq на больших списках.
Sx_arg1 – Строка, символ или целое число, предназначенное для сложения.
Sx_arg2 – Ни одной или более строк, символов, целых чисел для сложения.
Пример
concat("string") => string
concat("ab" 123 'xy) => ab123xy
Печатное имя символа
Имена символов могут содержать знаки алфавита в обоих регистрах и цифры от 0 до 9 (a-z, A-Z, 0-9), знак подчёркивания (_), знак вопроса (?). Если первым знаком в имени символа является цифра, перед ней должен стоять обратный слэш (\). Можно также использовать другие печатные символы, если перед ними ставить обратный слэш.
Получение печатного имени символа
Для получения печатного имени символа необходимо использовать функцию get_name. Эта функция наиболее полезна в программах, работающих с переменными, значение которых есть символ. Например:
location = 'U235
get_pname( location ) => "U235"
Значение символа
Значение символа может быть любого типа, включая тип символ.
Придание символу значения
Чтобы придать символу значение используйте оператор (=). Оператору (=) соответствует функция setq. Следующие выражения эквивалентны:
U235 = 100
setq( U235 100 )
setq(s_variableName g_newValueExp)
setq(s_variableName = g_newValue)
Задает новое значение переменной. Символ s_variableName связан со значением g_newValueExp.
s_variableName – имя переменной
g_newValueExp – вычисляемое выражение, присваиваемое переменной s_variableName.
Пример
x = 5 => 5
Присвоение значения 5 переменной x.
setq( x 5 ) => 5
Аналогично.
y = 'a => a
Присвоение символа a переменной y.
