fold ...

Sergey ShishkinSergey Shishkin
1 min read

+Fold - префиксный класс для поддержания свернутых индексов для отношений +String. Обычно используется в сочетании с префиксными классами +Ref или +Idx.

+IdxFold - префиксный класс для поддержания неуникальных индексов для последующих подстрок свернутых отдельных слов отношений +String. Принимает необязательные аргументы для минимально индексированной длины подстроки (по умолчанию 3) и атрибут +Hook.

fold - свертывание в каноническую форму: если any не является символом, он возвращается как есть. В противном случае возвращается новый транзитный (переходный) символ со всеми цифрами и всеми буквами any, преобразованными в нижний регистр. Если аргумент cnt указан и не равен нулю, результат усекается до этой длины.

(fold 'any ['cnt]) -> sym

: (fold " 1A 2-b/3")
-> "1a2b3"
: (fold " 1A 2-B/3" 3)
-> "1a2"

fold/3 - предикат Pilog, который выполняется успешно, если первый аргумент после свертки в каноническую форму является префиксом свернутых строковых представлений результата применения алгоритма get к следующим аргументам. Обычно используется в качестве предиката фильтра в запросах к базе данных select/3.

И опять пример без “рефинемента“! И нигде в документации хоть что-нибудь о каноничнскиой форме.

: (?
   @Nr (1 . 5)
   @Nm "main"
   (select (@Item)
      ((nr +Item @Nr) (nm +Item @Nm))
      (range @Nr @Item nr)
      (fold @Nm @Item nm) ) )
 @Nr=(1 . 5) @Nm="main" @Item={B1}
-> NIL

https://picolisp.tiddlyhost.com/#fold

P.S. Лексема POSIX!

0
Subscribe to my newsletter

Read articles from Sergey Shishkin directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Sergey Shishkin
Sergey Shishkin

Всегда чему-то учусь!