Alterator/libraries: различия между версиями

Материал из ALT Linux Wiki
Нет описания правки
м (category: more specific)
 
(не показано 5 промежуточных версий 3 участников)
Строка 1: Строка 1:
[[Category:Sisyphus]]
[[Category:alterator]]
[[category:scheme]]
==Стандартные библиотеки scheme, предоставляемые alterator==


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


{| class="standard"
{| class="standard"
Строка 62: Строка 62:
|}
|}


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


==== plist? ====
{|class="standard"
Проверяет что объект подходит под определение списка свойств - то есть список с чётным числом элементов.
!функция
 
!описание
==== alist->plist ====
|-
Преобразует ассоциативный список в список свойств
|nowrap="yes"|plistq <параметр> <список>
 
|Аналог assq. Возвращает пару (имя . значение) если соответствующее имя найдено в списке или #f
==== plist->alist ====
|-
Преобразует список свойств в ассоциативный список
|nowrap="yes"|cond-plistq <параметр> <список> [<значение по умолчанию>]
 
|Расширение plistq. Аналог cond-assq для списка свойств.
==== 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 algo)===

Текущая версия от 11:50, 21 июня 2016

Стандартные библиотеки scheme, предоставляемые alterator

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

функция описание
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

Списки свойств (alterator plist)

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

функция описание
plistq <параметр> <список> Аналог assq. Возвращает пару (имя . значение) если соответствующее имя найдено в списке или #f
cond-plistq <параметр> <список> [<значение по умолчанию>] Расширение 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. Выполняет последовательно процедуры и возвращает первой.