суббота, 5 октября 2019 г.

Коротко. О множествах

Размышлял тут на тему моноидов и вообще "обобщённых операций" над множествами...

И "неожиданно" пришёл к выводу, что операции isNull (пустое множество) и isAll (всё возможное множество) - крайне полезны для реализации других операций над множествами.

Говоря "программистским языком" - они вообще синглетоны могут возвращать.

При этом:

isNull * isNull = isNull
isAll *  isAll = isAll
isNull * isAll = isNull

isNull + isNull = isNull
isAll + isAll = isAll
isNull + isAll = isAll

isNull - isNull = isNull
isAll - isAll = isNull
isNull - isAll = isNull
isAll - isNull = isAll
-----
isNull * X = isNull
isAll *  X = X

isNull + X = X
isAll + X = isAll

isNull - X = isNull
isAll - X = isAll - X
X - isNull = X
X - isAll = isNull

среда, 2 октября 2019 г.

Коротко. Юникод

Вчерне доделал индексацию и поиск в юникодных текстах. Даже формулы ищутся. Много всяких приколов вылезло. Особенно со смешением кодировок. Например есть "кириллический игрек Y". Или альфа вместо А в русских словах. Умляуты, там где не надо. Штрихи оформленные маленькими буквами I в виде надстрочного индекса. Ну и всякое такое. Запрограммировал всё в "функциональном стиле". Вход преобразуется функтором, ну и так по цепочке. Конвейер.

Сделал функцию - ParseByFunctors.
Принимает строку и набор функторов, которые эту строку преобразуют в другую строку или даже набор строк.

Детали может быть позже.

P.S. Например есть слово Yamaha - написано вроде так. А а не ищется. Начинаем разбираться - НИ ОДНОГО латинского символа там нет.
Есть кириллическая Y.
Кириллические A.
Татарская (!) h.
Ну и да - соврал. Один латинский - m.
ОДИН латинский - есть. Ну и тому подобное. А в документе - Yamaha.

А IIV. Римская цифра. Где одна из I это не латинская, а греческая буква.

А заглавная АЛЬФА вместо А?

Или вроде "греческая сигма", заглавная. Ан нет. Есть похожая ЛАТИНСКАЯ буква - называется почти как немецкая "эсцет".
"Латинская Эш" - вот она как называется.

А ещё например метры квадратные то м2 - с верхним индексом. То м и специальный символ - верхняя 2.

Или скажем текст "запылился". Искажения. И получилось Z с черточкой, а не просто Z.

Или слово дОлжным, где над О ударение в виде штриха. Так - в первоисточнике.

А такие штрихи ещё и разные бывают.

Или о-умляут вместо О в русском слове, потому что на бумаге была грязь.

Или слово РОССИЯ, где русские только И и Я. Все остальные - латинские, а то и вообще греческие.