Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
skill / Лбы skill / Лекция2_м.doc
Скачиваний:
51
Добавлен:
05.06.2015
Размер:
157.18 Кб
Скачать

Использование оператора точка для доступа к свойствам символа

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

U235.x => 200

Вместо оператора точка можно использовать функцию getqq. Например, следующие выражения идентичны:

U235.x

getqq( U235 x )

getqq(s_id S_name)

getqq(sl_id.s_name)

Возвращает значение свойства из списка свойств символа. Аналогична get, за исключением того, что ни один из аргументов не вычисляется. Это синтаксическая форма. Используется вместе сputprop.putpropхранит свойство, аgetqqвозвращает его.

s_idсимвол, чьё свойство необходимо взять.

S_nameимя свойства, значение которого необходимо получить.

Пример

putprop( 'chip 8 'pins ) => 8 ;Присваиваем свойству pins символа chip значение 8

getqq( chip pins ) => 8

chip.pins => 8

Если запросить значение определенного свойства символа, и это свойство отсутствует в списке свойств символа, возвращается nil.

putprop(sl_id g_value S_name) добавляет свойство символу или disembodied property lists.

Если свойство уже существует, то старое значение изменяется на новое.

sl_id-символ или disembodied property list

g_value-значение свойства

S_name- имя свойства

Пример:

putprop(‘s 1+2 ‘x) => 3

Устанавливает свойство xравное 3 для символаs.

Также существуют функции getиgetq. Различие между ними в том, что функцияgetqqне вычисляет оба элемента,getqне вычисляет второй элемент, аgetвычисляет оба.

get( sl_id S_name)

Возвращает значение свойства в списке свойств (включая или disembodiedpropertylists), ассоциативной таблице, структуре и объекте базы данных. Если свойства не существует, возвращаетnil. Используется вместе сputprop.putpropхранит свойство, аgetqqвозвращает его.

sl_id- символ или разрозненный список свойств

S_name- имя свойства, значение которого необходимо получить

Пример:

putprop( 'chip 8 'pins ) => 8

get( 'chip 'pins ) => 8

chip.pins => 8

x = '(nil a 3 b 4) ;a disembodied property list

x->a => 3

get(x 'a) => 3

getq(sl_id S_name)

getq(sl_id->s_name)

Возвращает значение свойства в списке свойств. Аналогична get, за исключением того, что второй аргумент не вычисляется. Это синтаксическая форма.

sl_idсимвол или разрозненный список свойств.

S_name - имя свойства, значение которого необходимо получить.

Пример

putprop( 'chip 8 'pins ) => 8 ; Присваиваем свойству pins символа chip значение 8

getq( 'chip pins ) => 8

chip.pins => 8

chip1 = list(nil 'pins 10) => (nil pins 10)

chip1->pins => 10

Использование оператора стрелка и оператора присвоения для хранения свойств символа

С помощью оператора ->можно получить доступ к свойствам символа. (Можно получить свойства элемента косвенным образом) :

b = ‘a

a.x = 5

a.y = 10

b -> x

=> 5

b -> y

=>10

Для непрямой записи в список свойств используется оператор ( ->) и оператор (=):

b -> x = 25

a.x

=> 25

Это же можно сделать также и с помощью функции putpropq():

putpropq(sl_id g_value S_name)

Добавляет свойства символам или разрозненным спискам свойств. Аналогична putprop за исключением того, что аргумент s_name не вычисляем. Если свойство с таким именем уже существует, старое значение будет заменено новым.

sl_idсимвол или разрозненный список свойств.

g_valueзначение указанного свойства.

S_name - имя свойства.

Пример

putpropq('s 1+2 x) => 3

y = 'x => x

y->x = 1+2 => 3

;эквивалентные примеры.

Важно

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

В следующем примере даже несмотря на то, что свойство устанавливается выражением let, оно все равно доступно вне выражения let. Другими словами, когда поток входных данных поступает и закрывается в выражениях let и prog, на список свойств локальных символов это не влияет.

x = 0

let( ( x )

x = 2

x.example = 5

) ; let

x => 0

plist( 'x ) => (example 5)

Соседние файлы в папке Лбы skill