*Uni ...

Sergey ShishkinSergey Shishkin
2 min read

Думал, стоит ли акцентировать лексемы с префиксом негации “un“. С одной стороны, он не используется самостоятельно как препозиция (предлог), но с другой, имеет развитое концептуальное пространство, при этом как в субъективной ментальности, так и в институализированных логических теориях, тем более, в информатике. Решил ограничиться попутным замечанием, без отдельного поста, все такие лексемы уже перечислялись и описывались в соответствующих “корневых“ контекстах - unless, untrace, undef, unbug … Немного специфичным здесь является until, но который позже планируется в списке классификатора функций контроля потока.

А сегодня на календаре “uni“, фактически, тоже префикс и префикс нетривиальный - юнит, уникальный, унитарный, универсальный и унификация …

*Uni - глобальная переменная, содержащая дерево idx со всеми уникальными данными, которые были собраны с помощью макроса чтения запятой (,). Обычно используется для локализации. Установка *Uni в T отключает этот механизм.

: (off *Uni)            # Clear
-> NIL
: ,"abc"                # Collect a transient symbol
-> "abc"
: ,(1 2 3)              # Collect a list
-> (1 2 3)
: *Uni
-> ("abc" NIL (1 2 3))

unify - первая форма объединяет все с текущей средой Pilog на текущем уровне и со значением NIL и возвращает новую среду или NIL, если не удалось. Вторая форма объединяет все переменные на заданном уровне с текущей.

(unify 'any) -> lst

(unify 'cnt) -> cnt

: (? (^ @A (unify '(@B @C))))
 @A=(((NIL . @C) 0 . @C) ((NIL . @B) 0 . @B) T)

uniq - возвращает уникальный список, удаляя все повторяющиеся элементы из lst.

: (uniq (2 4 6 1 2 3 4 5 6 1 3 5))
-> (2 4 6 1 3 5)

uniq/2 - предикат Pilog, который успешно выполняется, если второй аргумент еще не сохранен в индексной структуре первого аргумента. idx используется для внутреннего хранения значений и проверки уникальности.

: (let U NIL
   (? (lst @X (a b c b c d)) (uniq U @X)) )
 @X=a
 @X=b
 @X=c
 @X=d
-> NIL
: (solve '((^ @B (box)) (lst @X (a b c b c d)) (uniq @B @X)) @X)
-> (a b c d)

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

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

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