Alterator/libraries

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

< Alterator(Различия между версиями)
Перейти к: навигация, поиск
(list-exchange)
м (category: more specific)
 
(20 промежуточных версий не показаны.)
Строка 1: Строка 1:
-
[[Category:Sisyphus]]
+
[[Category:alterator]]
-
{{MovedFromFreesourceInfo|AltLinux/Sisyphus/Alterator/libraries}}
+
[[category:scheme]]
 +
==Стандартные библиотеки scheme, предоставляемые alterator==
-
Наряду с srfi-1,srfi-2,srfi-11,srfi-13 alterator предоставляет свои функции, аналогов которым в R5RS и выше перечисленных srfi к сожалению не обнаружилось.
+
===Работа со строками (alterator str)===
-
__TOC__
+
{| class="standard"
 +
!функция
 +
!описание
 +
|-
 +
|nowrap="yes"|string-cut <строка> <символ-разделитель>
 +
|Делит строку по разделителю. Ссылка на string-split, специфичную для guile функцию.
 +
|-
 +
|nowrap="yes"|string-cut-repeated <строка> <символ-разделитель>
 +
|string-cut с последующим удалением пустых строк. Удобно когда надо игнорировать повторяющиеся разделители.
 +
|-
 +
|nowrap="yes"|string-quote <процедура> <строка>
 +
|Общий механизм для квотирования строк. Процедура имеет тип char->string.
 +
|-
 +
|}
 +
===Работа со списками (alterator algo)===
-
=== Работа со строками ===
+
{|class="standard"
 +
!функция
 +
!описание
 +
|-
 +
|nowrap="yes"|append1 <список> <элемент>
 +
|Добавляет один элемент в конец списка. Аналог (append <список> (list <элемент>)).
 +
|-
 +
|nowrap="yes"|list-remove <список> <номер>
 +
|Удаляет из списка элемент в указанной позиции.
 +
|-
 +
|nowrap="yes"|string-list-index <список> <строка>
 +
|Номер строки в списке или #f если строка в списке отсутствует.
 +
|-
 +
|nowrap="yes"|cond-car <объект> [<значение по умолчанию>]
 +
|Расширение car. Возвращает <значение по умолчанию> (или #f если оно не задано) в случае, когда <объект> не список или пустой список.
 +
|-
 +
|nowrap="yes"|cond-cdr <объект> [<значение по умолчанию>]
 +
|Расширение cdr
 +
|-
 +
|nowrap="yes"|cond-cadr <объект> [<значение по умолчанию>]
 +
|Расширение cadr
 +
|-
 +
|}
-
==== empty-string?,not-empty-string? ====
+
===Работа с ассоциативными списками (alterator algo)===
-
Аналог '''string-null?''',  главное отличие , что спрашивают "эй, ты пустая строка?" , а не "эй строка, ты пустая?" .
+
{| class="standard"
-
То есть делают предварительную проверку string?
+
!функция
 +
!описание
 +
|-
 +
|nowrap="yes"|alist-set <параметр> <значение> <список>
 +
|Расширение acons. Если в списке уже имеется такой же параметр (сравнение типа equal?), то его значение будет заменено и дубликат не появится
 +
|-
 +
|nowrap="yes"|cond-assoc <параметр> <список> [<значение по умолчанию>]
 +
|Расширение assoc. Возвращает найденный элемент (а не пару) или значение по умолчанию (#f если значение не найдено).
 +
|-
 +
|nowrap="yes"|cond-assq <параметр> <список> [<значение по умолчанию>]
 +
|Расширение assq
 +
|-
 +
|}
-
==== ->string ====
+
=== Списки свойств (alterator plist)===
-
Параметры:
+
-
* <tt>obj</tt> - объект, который будет преобразован в строку
+
-
Превращает любой datum в строку. Превращение происходит согласно правилам display.
+
-
 
+
-
==== string-cut ====
+
-
Параметры:
+
-
* <tt>str</tt> - входящая строка
+
-
* <tt>separator</tt> - символ-разделитель.
+
-
Рубит строку по символу разделителю и возвращает список полученных кусков. Если рубить нечего, то возвращает список состоящий из исходной строки.
+
-
Сейчас string-cut приравнивается к '''string-split''' - специфичная для guile функция.
+
-
 
+
-
==== string-cut-repeated ====
+
-
Вариант предыдущей команды, которой исключает из результата пустые строки. Фактически получается игнорирование повторяющихся символов-разделителей.
+
-
 
+
-
==== string-quote ====
+
-
Параметры:
+
-
* <tt>quote-proc</tt> - функция-фильтр типа char->string
+
-
* <tt>str</tt> - исходная строка
+
-
Вариант '''string-map''', с той разницей что преобразователь имеет тип не char->char, а char->string . Это позволяет использовать оный движок для проведения квотирования , когда один символ в строке заменятся двумя и более.
+
-
 
+
-
=== Работа со списками ===
+
-
 
+
-
==== append1 ====
+
-
Параметры:
+
-
* <tt>lst</tt> - список
+
-
* <tt>item</tt> - элемент
+
-
 
+
-
Специализированный вариант '''append''',  для добавления ровно одного элемента.
+
-
(append1 lst item) == (append lst (list item))
+
-
 
+
-
==== list-remove ====
+
-
Параметры:
+
-
* <tt>lst</tt> - список
+
-
* <tt>num</tt> - номер элемента
+
-
 
+
-
Возвращает исходный список с удалённым элементом в позиции  <tt>num</tt>.
+
-
 
+
-
 
+
-
 
+
-
==== list-flat ====
+
-
"Расплющивает" переданный в качестве едиственного параметра список, перенося элементы подсписков на уровень выше.
+
-
 
+
-
 
+
-
==== cond-car,cond-cdr,cond-cadr ====
+
-
Набор функций, для сомневающихся. Возвращают соотв. элемент списка или #f , если оный отсутствует.
+
-
 
+
-
=== Работа с [http://www.delorie.com/gnu/docs/guile/guile_243.html ассоциативными списками] ===
+
-
 
+
-
==== alist-set ====
+
-
Параметры:
+
-
* <tt>name</tt> - ключ
+
-
* <tt>value</tt> - значение
+
-
* <tt>alist</tt> - ассоциативный список
+
-
 
+
-
Вариант '''acons''', но только в отличие от него не накапливает дубликаты в списке. Для сравнения использует '''eq?'''
+
-
 
+
-
==== cond-assoc,cond-assq ====
+
-
Параметры:
+
-
* <tt>name</tt> - ключ
+
-
* <tt>alist</tt> - ассоциативный список
+
-
* <tt>default</tt> - параметр по-умолчанию.
+
-
 
+
-
Вариант assoc (assq), который возвращает найденный ключ или #f или значение по-умолчанию.
+
-
<div style="display: inline; color: red;">Note: в guile есть похожее семейство  функций assoc-ref/assq-ref , но они все не поддерживают управление значением по-умолчанию.</div>
+
-
 
+
-
=== Списки свойств ===
+
Списки свойств - это списки вида '''(параметр значение параметр значение ...)''' удобны прежде всего для пользователей так как содержат меньше скобок, используются как замена ассоциативных списков.
Списки свойств - это списки вида '''(параметр значение параметр значение ...)''' удобны прежде всего для пользователей так как содержат меньше скобок, используются как замена ассоциативных списков.
-
==== 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 ====
+
==="Ячейки" (alterator algo)===
-
Аналог cond-assq для списка свойств.
+
alterator-lookout запрещает явное использование операции set!, вместо этого предлагается контейнер cell, с операциями получения и изменения значения.
-
=== Прочий синтаксический сахар ===
+
{| class="standard"
 +
!функция
 +
!описание
 +
|-
 +
|nowrap="yes"|make-cell <объект>
 +
|Создаёт контейнер, хранящий указанный объект
 +
|-
 +
|nowrap="yes"|cell-ref <контейнер>
 +
|Возвращает ссылку на сохранённый объект
 +
|-
 +
|nowrap="yes"|cell-set! <контейнер> <значение>
 +
|Изменяет объект, сохранённый в контейнере
 +
|-
 +
|}
-
==== thunk ====
+
Пример работы с контейнерами:
-
тоже самое что и '''lambda()'''
+
<pre>
 +
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
 +
</pre>
-
==== begin-1 ====
+
===Разное (alterator algo)===
-
тоже что и '''begin''', но возвращает результат выполнения первой инструкции (а не последней). Аналог prog1 из Common Lisp.
+
-
=== Ссылки ===
+
{| class="standard"
-
* [http://www.delorie.com/gnu/docs/guile/guile_446.html fold и компания]
+
!функция
 +
!описание
 +
|-
 +
|nowrap="yes"|begin-1 <процедура> [<процедура>]
 +
|Как begin. Выполняет последовательно процедуры и возвращает первой.
 +
|-
 +
|}

Текущая версия на 08: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. Выполняет последовательно процедуры и возвращает первой.
 
Личные инструменты