Alterator/libraries

Материал из ALT Linux Wiki
Freesource-logo.png Blue Glass Arrow.svg MediaWiki logo.png
Эта страница была перемещена с freesource.info.
Эта страница наверняка требует чистки и улучшения — смело правьте разметку и ссылки.
Просьба по окончанию убрать этот шаблон со страницы.


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


Работа со строками

empty-string?,not-empty-string?

Аналог string-null?, главное отличие , что спрашивают "эй, ты пустая строка?" , а не "эй строка, ты пустая?" . То есть делают предварительную проверку string?

->string

Параметры:

  • obj - объект, который будет преобразован в строку

Превращает любой datum в строку. Превращение происходит согласно правилам display.

string-cut

Параметры:

  • str - входящая строка
  • separator - символ-разделитель.

Рубит строку по символу разделителю и возвращает список полученных кусков. Если рубить нечего, то возвращает список состоящий из исходной строки. Сейчас string-cut приравнивается к string-split - специфичная для guile функция.

string-cut-repeated

Вариант предыдущей команды, которой исключает из результата пустые строки. Фактически получается игнорирование повторяющихся символов-разделителей.

string-quote

Параметры:

  • quote-proc - функция-фильтр типа char->string
  • str - исходная строка

Вариант string-map, с той разницей что преобразователь имеет тип не char->char, а char->string . Это позволяет использовать оный движок для проведения квотирования , когда один символ в строке заменятся двумя и более.

Работа со списками

append1

Параметры:

  • lst - список
  • item - элемент

Специализированный вариант append, для добавления ровно одного элемента. (append1 lst item) == (append lst (list item))

list-remove

Параметры:

  • lst - список
  • num - номер элемента

Возвращает исходный список с удалённым элементом в позиции num.


list-flat

"Расплющивает" переданный в качестве едиственного параметра список, перенося элементы подсписков на уровень выше.


cond-car,cond-cdr,cond-cadr

Набор функций, для сомневающихся. Возвращают соотв. элемент списка или #f , если оный отсутствует.

Работа с ассоциативными списками

alist-set

Параметры:

  • name - ключ
  • value - значение
  • alist - ассоциативный список

Вариант acons, но только в отличие от него не накапливает дубликаты в списке. Для сравнения использует eq?

cond-assoc,cond-assq

Параметры:

  • name - ключ
  • alist - ассоциативный список
  • default - параметр по-умолчанию.

Вариант assoc (assq), который возвращает найденный ключ или #f или значение по-умолчанию.

Note: в guile есть похожее семейство функций assoc-ref/assq-ref , но они все не поддерживают управление значением по-умолчанию.

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

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

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 для списка свойств.

Прочий синтаксический сахар

thunk

тоже самое что и lambda()

begin-1

тоже что и begin, но возвращает результат выполнения первой инструкции (а не последней). Аналог prog1 из Common Lisp.

Ссылки