enum и enum?

enum - перечисляет ячейки, поддерживая двоичное дерево в var
. Ключи неявно выводятся из перечисленных cnt
, а результирующее дерево балансируется (независимо от порядка вставки). В первой форме возвращается соответствующая ячейка. Если она еще не существует, она (деструктивно) вставляется в дерево. Если указано более одного аргумента cnt
, возвращаемая ячейка впоследствии берется в качестве следующего дерева для обработки. Вторая форма возвращает несортированный список ассоциаций всех пар ключ-значение в дереве. enum можно использовать для эмуляции (возможно, разреженных) массивов.
(enum 'var 'cnt ['cnt ..]) -> lst
(enum 'var) -> lst
: (for (I . S) '(a b c d e f g h i j k l m n o)
(set (enum 'E I) S) )
-> o
: E
-> (a (b (d (h) l) f (j) n) c (e (i) m) g (k) o)
: (view E T)
o
g
k
c
m
e
i
a
n
f
j
b
l
d
h
-> NIL
: (enum 'E 6)
-> (f (j) n)
: (val (enum 'E 6))
-> f
: (val (enum 'E 1))
-> a
: (val (enum 'E 12))
-> l
: (enum 'E)
-> ((8 . h) (4 . d) (12 . l) (2 . b) (10 . j) (6 . f) (14 . n) (1 . a) (9 . i) (5 . e) (13 . m) (3 . c) (11 . k) (7 . g) (15 . o))
: (let A NIL # 2-dimensional array
(for I 4
(for J 4
(set (enum 'A I J) (pack I "-" J)) ) )
(for I 4
(for J 4
(prin " " (val (enum 'A I J))) )
(prinl) ) )
1-1 1-2 1-3 1-4
2-1 2-2 2-3 2-4
3-1 3-2 3-3 3-4
4-1 4-2 4-3 4-4
-> NIL
enum? - проверяет двоичное enum (пронумерованное, проиндексированное?) дерево на наличие ключей в аргументах cnt
. Возвращает соответствующую ячейку или NIL
, если не найдено. Дерево не модифицируется.
(enum? 'lst 'cnt ['cnt ..]) -> lst | NIL
: (enum? E 7)
-> (g (k) o)
: (enum? E 16)
-> N
https://picolisp.tiddlyhost.com/#enum
P.S. Использование перечислений позволяет сделать исходные коды программ более читаемыми, так как позволяют заменить «магические числа», кодирующие определённые значения, на читаемые имена. Или категориальная переменная? … а так же шкала.
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
Всегда чему-то учусь!