Функции работы с 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]
