enum и enum?

Sergey ShishkinSergey Shishkin
2 min read

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. Использование перечислений позволяет сделать исходные коды программ более читаемыми, так как позволяют заменить «магические числа», кодирующие определённые значения, на читаемые имена. Или категориальная переменная? … а так же шкала.

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

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