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

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

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

append

append1

car

cdr

nth

cons

tconc

lconc

nthelm

nthcdr

nconc

length

member

declare

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_index0 l_list ) – возвращает n-ый элемент списка. Возвращает nil если x_index0 отрицательный, больше или равен числу элементов списка. Нумерация начинается с нуля. При 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_index1 l_list)- возвращает n-ый элемент списка. Возвращает nil если x_index1 меньше или равен 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

member(g_obj l_list) – возвращает список элементов начиная с искомого или пустой список, если заданного элемента нет. Данная функция не способна проверить все уровни иерархического списка, она работает только с верхним уровнем элементов.

Пример:

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

member( 4 numbers) =>nil

member(2 numbers) =>(2 3)

declare( s_arrayName[ x_sizeOfArray]) – создает массив с заданным количеством элементов. Все элементы этого массива заданы как unbound. Между именем массива и квадратными скобками не должно быть пробела.

Пример:

declare( a[10]) создает массив из 10 элементов с индексами от 0 до 9.

a[0]=1

a[1]=2

a[3]=a[0]+a[1]

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