Alterator/libraries

Материал из ALT Linux Wiki


Наряду с srfi-1,srfi-2,srfi-11,srfi-13 alterator предоставляет свои функции, аналогов которым в R5RS и выше перечисленных srfi к сожалению не обнаружилось.

Работа со строками (alterator string)

функция описание
string-cut <строка> <символ-разделитель> Делит строку по разделителю. Ссылка на string-split, специфичную для guile функцию.
string-cut-repeated <строка> <символ-разделитель> string-cut с последующим удалением пустых строк. Удобно когда надо игнорировать повторяющиеся разделители.
string-quote <процедура> <строка> Общий механизм для квотирования строк. Процедура имеет тип char->string.

Работа со списками (alterator algo)

функция описание
append1 <список> <элемент> Добавляет один элемент в конец списка. Аналог (append <список> (list <элемент>)).
list-remove <список> <номер> Удаляет из списка элемент в указанной позиции.
string-list-index <список> <строка> Номер строки в списке или #f если строка в списке отсутствует.
cond-car <объект> [<значение по умолчанию>] Расширение car. Возвращает <значение по умолчанию> (или #f если оно не задано) в случае, когда <объект> не список или пустой список.
cond-cdr <объект> [<значение по умолчанию>] Расширение cdr
cond-cadr <объект> [<значение по умолчанию>] Расширение cadr

Работа с ассоциативными списками (alterator algo)

функция описание
alist-set <параметр> <значение> <список> Расширение acons. Если в списке уже имеется такой же параметр (сравнение типа equal?), то его значение будет заменено и дубликат не появится
cond-assoc <параметр> <список> [<значение по умолчанию>] Расширение assoc. Возвращает найденный элемент (а не пару) или значение по умолчанию (#f если значение не найдено).
cond-assq <параметр> <список> [<значение по умолчанию>] Расширение assq

Списки свойств

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

plist?

Проверяет что объект подходит под определение списка свойств - то есть список с чётным числом элементов.

alist->plist

Преобразует ассоциативный список в список свойств

plist->alist

Преобразует список свойств в ассоциативный список

plist-any

Аналог any из srfi-1. Бежит по списку проверяя предикатом значения, как только предикат выдаёт не ложное значение - оно возвращается в качестве ответа, иначе - ответ #f. Предикат - двухаргументная функция.

plist-map

Работает подобно map из srfi-1 для одного списка. Пропускает список через двух-аргументную функцию.

plist-filter

Аналог filter из srfi-1. Фильтрует список при помощи двух-аргументого предиката. Не прошедшие проверку элементы удаляются из списка (то есть удаляется и ключ и его значение).

plist-fold

Аналог fold из srfi-1. Пропускает список через трёх-аргументную функцию, с параметрами: имя , значение, аккумулятор.

plist-for-each

Аналог for-each из srfi-1. Прогоняет по списку двух-аргументную функцию.

plistq

Аналог assq, возвращает пару: имя-значение , если соответствующее имя найдено в списке.

cond-plistq

Аналог cond-assq для списка свойств.

"Ячейки" (alterator algo)

alterator-lookout запрещает явное использование операции set!, вместо этого предлагается контейнер cell, с операциями получения и изменения значения.

функция описание
make-cell <объект> Создаёт контейнер, хранящий указанный объект
cell-ref <контейнер> Возвращает ссылку на сохранённый объект
cell-set! <контейнер> <значение> Изменяет объект, сохранённый в контейнере

Пример работы с контейнерами:

guile> (use-modules (alterator algo))
guile> (define a (make-cell 3))
guile> (cell-ref a)
3
guile> (cell-set! a 4)
guile> (cell-ref a)
4

Разное (alterator algo)

функция описание
begin-1 <процедура> [<процедура>] Как begin. Выполняет последовательно процедуры и возвращает первой.