val и var

Sergey ShishkinSergey Shishkin
2 min read

Решил объединить эти лексемы (их редукции), поскольку они “ходят парой“ … У обоих неудачный перевод на русский язык. Некоторые авторы транслируют “value” как “значение”, а некоторые как “ценность“. В конечном итоге, все понимают как контекст, но сам термин интерпретируют чисто формально, фактически, как правую часть импликации, содержание (контент) правого слота или фрагмента памяти (блока, контейнера). Отсюда и термины для процесса “оценивания“ и тот же eval. Ну да, ценности - это то, что имеет для нас значение, но последний термин в русскоязычной лексике и приобрел неоднозначность благодаря его употреблению в сфере программирования и семиотики. Изначально “значение“ от знака, то есть символа, но мы символизируем и имя переменной, поэтому и “ценность“ более адекватно отражает концепцию. Рекомендую не использовать термин “значение“, а заменить его даже на более традиционный - “интерпретация“. По сути переменная - параметр с левой частью пары, в которую помещают имя (термин). То есть, та же “декларация” или “дефиниция” (определение), и ещё … как бы эту процедуру не назвали - примитивный интерпретатор, где в правой части пары содержится результат этой элементарной процедуры “связывания“. Что касается термина “вариант“ (вариация), то здесь концептуальная проблема с его спецификациями типа констант и “мутабельных переменных” (“масла маслянного“), и с этой белибердой тоже надо что-то делать, она путает тех, кто начинает погружаться в лексику информатики. Тот же “параметр” - традиционный и конвенциональный термин (кстати, активно используется в лисп-подобном AUTOCAD).

var - определяет переменную класса sym с начальным значением any для текущего класса, неявно заданным значением глобальной переменной *Class, или — во второй форме — для явно заданного класса cls.

(var sym . any) -> any

(var (sym . cls) . any) -> any

var: - извлекает значение переменной класса sym для текущего объекта This, выполняя поиск в списках свойств его класса(ов) и суперклассов.

: (class +A)
-> +A
: (var a . 1)
-> 1
: (var b . 2)
-> 2
: (object 'O '(+A) 'a 9 'b 8)
-> O
: (with 'O (list (: a) (: b) (var: a) (var: b)))
-> (9 8 1 2)

val - возвращает текущее значение var.

val/3 - предикат Pilog, возвращающий значение атрибута объекта. Обычно используется в запросах к базе данных. Первый аргумент — переменная Pilog для привязки значения, второй — объект, а третий и последующие аргументы используются для применения алгоритма get к этому объекту.

: (?
   (db nr +Item (2 . 5) @Item)   # Fetch articles 2 through 5
   (val @Nm @Item nm)            # Get item description
   (val @Sup @Item sup nm) )     # and supplier's name
 @Item={B2} @Nm="Spare Part" @Sup="Seven Oaks Ltd."
 @Item={B3} @Nm="Auxiliary Construction" @Sup="Active Parts Inc."
 @Item={B4} @Nm="Enhancement Additive" @Sup="Seven Oaks Ltd."
 @Item={B5} @Nm="Metal Fittings" @Sup="Active Parts Inc."
-> NIL

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

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

https://en.wikipedia.org/wiki/Pico_(programming_language)

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

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