Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Специальные символы и операторы



SKILL использует многие арифметические операторы:

 

**              - возведение в степень;

*                - умножение;

/                 - деление;

+                - сложение(плюс);

-                 - вычитание(минус);

++а            - инкремент;

--а              - декремент;

==              - сравнение (равно);

!=                - неравно

=                - присваивание;

 

 

В следующей таблице приведен список специальных символов и их значений в SKILL.

 

Замечание: Всем символам, не являющимся буквами цифрами и  ( _ или ?) , которые используются в имени переменных(функций) должен предшествовать, символ обратной косой черты (\).

 

Специальные символы SKILL

Символ   Имя Значение
\ Обратная косая черта «Экранирование» для специальных символов
( ) Круглые скобки Группирует список элементов (тип list), вызов функции
[ ] Квадратные скобки  (номера элементов массива, только правая скобка закрывает все не закрытые скобки)  
Одиночные кавычки Предотвращение интерпретации выражения a=5 b=a => b=5; b=’a => b=a
Двойные кавычки Используется для задания типа строка.
, Запятая Необязательный разделитель элементов списка
; Точка с запятой Однострочный комментарий  
+, –, *, / Арифметическая Для арифметических операций ; /* и */ также объединяют комментарии и определения  
!,^,&,| Логическая Для логического оператора  
<,>,= Сравнения   Для сравнения и присвоения  
? Знак вопроса Если является первым символом, то определяет ключевое  
% Проценты Используется для характеристики чисел

 

Пример:

If(( (    ] ; результат – все скобки закрыты

 

Пробел

Пробел иногда приобретает смысловое значение, поэтому необходимо рассмотреть несколько синтаксических ограничений. При написании функции, имя функции пишется перед левой скобкой и пробел между ними недопустим.

 Например,

f( a b c) и g() правильное название , но f ( a b c) и g () неверно.

Также минус должен непосредственно предшествовать (без пробела) тому оператору, которому он принадлежит.

Например,

-1, - a, и -( a* b) правильная конструкция, но - 1, - a, и - ( a* b) неверно.

Двойной минус (оператор вычитания) должен быть с обеих сторон окружен пробелами, либо пробелов ни там, ни там вообще быть не должно. Для избежания неясности один из методов должен быть использован постоянно.

Например,

a - b и a- b правильная конструкция для двойного минуса, но a - b неверно.

 

Комментарии

SKILL допускает два типа комментариев. Один стиль – блочно-ориентированный, где для разделения используются знаки /* и */.

 Например:

/* This s a bloc of comments

comment line2

comment line3 etc.

*/

Второй стиль – линейно ориентирован. Точка с запятой (;) указывает, что вся информация до конца строки, после нее является комментарием.

 

Например,

x = 1     ; comment

              ;comment line1

Как более простой, рекомендуется линейно – ориентированный стиль.



Типы данных

Skill поддерживает различные типы данных.

 

array          ó a (одномерный массив, двумерный получается комбинированием);

dbobject    ó d (объект базы данных);

flonum      ó f (число с плавающей точкой);

list             ó l (связанный список);

integer       ó x (целое число);

symbol      ó s(символ);

stringSymbol ó S(символ или строка символов);

windowtype ó w(тип окна).

 

Масштабные коэффициенты

Символ Название Множитель   Пример
M Mega 106 10M [ 10,000,000 ]  
K Kilo 103 10K [ 10,000 ]  
% percent 10-2 5% [ 0.05 ]  
m milli 10-3 5m [ 5.0e-3 ]  
u micro 10-6 1.2u [ 1.2e-6 ]  
n nano 10-9 1.2n [ 1.2e-9  
p pico 10-12 1.2p [ 1.2e-12 ]  
f femto 10-15 1.2f [ 1.2e-15 ]  

 

Тип данных Atom

Atom – все объекты SKILL, кроме непустых листов. nil является одновременно и типом atom, и типом list.

Другими словами это все скалярные типы данных. Но есть несколько основных

nil – не верно (для логических операций) или пустой лист

t – верно (для логических операций)

unbound – переменная не была заданна

Нельзя пользоваться этими обозначениями для имен переменных.

 

Тип данных строка

Строка это последовательность символов, заключенных в двойные кавычки. Например: “acd” “123”

Тип данных List

SKILL list – это упорядоченный набор объектов данных SKILL. Структура данных list является основной в SKILL и может быть использована в самых различных ситуациях.

Элементы, входящие в list, могут быть любого типа данных, а также могут быть переменными или другими листами. List может включать в себя набор элементов или быть пустым. Пустой list обозначается пустыми скобками “( )” или специальным словом nil. В любом случае list должен быть заключен в скобки. List может содержать несколько элементов типа list для формирования структур данных любой сложности.

Задание List может осуществляться двумя способами:

  задание элементов списка указанием количества аргументов функции list:

a = list(1 2 3)

  задание элементов списка поименно с помощью оператора ('):

a = ‘(1 2 3)

List может состоять из символов, быть пустым, или содержать другие списки.

Примеры:

a = ‘(1 a 3)

a = ‘(   )

a = ‘(‘(1 2)’(3 4))

Функции работы с list

SKILL обладает широким набором функций для создания и управления list. Многие функции SKILL в качестве возвращаемого значения имеют list. SKILL может использовать несколько строк терминала для вывода list (глобальная переменная SKILL _itemsperline хранит соответствующее целое значение)

append( list1 list2)-объединяет два списка.

Результат применения функции append следует сохранять в переменную, иначе дальнейшая работа со списком будет невозможна.

 

Пример:

append( ‘(1 2) ‘(3 4))

=>’(1 2 3 4)

a=’(1 2)

b=’(3 4)

append(a b)

=>’(1 2 3 4)

oneList = '( 4 5 6 ) => ( 4 5 6 )

aList = '( 1 2 3 ) => ( 1 2 3 )

bList = append( oneList aList) => ( 4 5 6 1 2 3 )

 

append1( list arg )-добавляет новый элемент в конец списка.

 

Пример:

append1( ‘(1 2 3) 4))

=>’(1 2 3 4)

car( list )- возвращает первый элемент списка. Сам список остается прежним.

Пример:

b = ‘(1 2 3)

a= car(b) => (1)

a              =>(1)

z = ‘(1 2 3) =>(1 2 3)

y = car(z) => 1

y              =>1

z              =>(1 2 3)

car(nil)    => nil

cdr( list )-возвращает все элементы списка кроме первого(возвращает лист).

Пример:

cdr ( '(a b c) ) => (b c)

z = '(1 2 3)

cdr ( z ) => (2 3)

Функции cdr car можно использовать вложенным способом

 

Пример:

caaar ('(((1 2 3)(4 5 6))(7 8 9))) => 1

caaar - car( car( car( l_list))).

caadr ('(((1 2 3)(4 5 6))(7 8 9))) => 7

car( car( cdr( l_list))).

caar ('(((1 2 3)(4 5 6))(7 8 9))) => (1 2 3)

car( car( l_list)).

z = '(1 2 3) => (1 2 3)

cadr ( z ) => 2

nth( x _ index 0 l _ list )      – возвращает n-ый элемент списка. Возвращает nil если x _ index 0 отрицательный, больше или равен числу элементов списка. Нумерация начинается с нуля.  При n = 0 функция как и car возвращает первый элемент.

 

Пример:

nth ( 1 '( a b c ) ) => b

z = '(1 2 3) => (1 2 3)

nth (2 z ) => 3

nth (3 z ) => nil

nthelem( x _ index 1 l _ list )- возвращает n-ый элемент списка. Возвращает nil если x _ index 1 меньше или равен 0 и больше чем число элементов списка. Нумерация начинается с единицы.  При n = 1 функция как и car возвращает первый элемент.

 

Пример:

nthelm ( 1 ‘(a b c)) =>a

z = ‘(1 2 3)

nthelem (2 z)       =>2

cons( element list )-добавляет на первое место списка один элемент. Результат применения функции cons следует сохранять в переменную, иначе дальнейшая работа со списком будет невозможна. Обычно результат передается в переменную, до этого хранившую исходный список.

Пример:

cons(1 nil)                       => (1)

cons(‘a ‘(b c))                 => (a b c)

result = '( 2 3 ) => ( 2 3 )

result = cons( 1 result ) => ( 1 2 3 )

Следующий пример показывает как быстро можно создать список от 100 до 1.

x=nil

for( i 1 100 x = cons(i x)) => t

x                                       => (100 99 98 . . 2 1)

Можно сделать

x = reverse( x) =>(1 2 3 …100)

nthcdr( x _ count l _ list ) применяет команду cdr к данному списку заданное количество раз.

 

Пример:

nthcdr ( 3 ‘(a b c d)) =>(d)

z = ‘(1 2 3)

nthcdr (2 z)             =>(3)

nthcdr (-1 z)            =>(nil 1 2 3)

Если x _ count меньше 0, то возвращается результат выполнения cons ( nil l _ list )

tconc( l_ ptr g_ x) добавление элемента в конец списка.

для создания новой tconc структуры(списка) l_ptr должна быть определена как nil.

g_x элемент добавляемый в конец списка. В результате выполнения этой функции мы получаем список l_ptr с добавленным в конец элементом.

 

Пример:

x = tconc ( nil 1) => x ((1) 1)

tconc ( x 2 )    =>x ((1 2) 2)

tconc ( x 3 )    =>x ((1 2 3) 3)

x = car( x )     =>x (1 2 3)

lconc( l_ tconc l_ list ) добавление списка к другому списку

l_ tconc структура(лист), созданная с помощью команды tconc.

l_ list список, добавляемый в конец структуры l_tconc. В результате выполнения этой функции мы получаем список l_tconc с добавленным в конец списком.

 

Пример:

x = tconc(nil 1) => x ((1) 1)

lconc ( x ‘(2 3 4)) => x ((1 2 3 4) 4)

lconc ( x ‘(5)) => x ((1 2 3 4 5) 5)

x = car( x )   => x (1 2 3 4 5)

nconc( l_arg1 l_arg2 [l_arg3…] ) объединение нескольких списков

 

Пример:

x = ‘( a b c)

nconc ( x ‘(d)) => x (a b c d)

nconc ( x ‘(e f g)) => x (a b c d e f g)

данная функция быстрее чем append? Но медленнее чем tconc и lconc. Данная функция использует меньше памяти.

length( lao _ arg ) – возвращает количество элементов списка или массива.

 

Пример:

length( ‘(a b c d)) =>4

z = ‘(1 2 3)

length( z )              =>3

Лекция 2.


Поделиться:



Последнее изменение этой страницы: 2019-04-19; Просмотров: 167; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.047 с.)
Главная | Случайная страница | Обратная связь