Функция cons в Lisp и функциональном программировании
Cons
Функция `cons` в Lisp: создание пар данных, основная структура для хранения двух значений или указателей. Ключевой элемент функционального программирования.
Сравнивайте с английским: нажмите на абзац — оригинал откроется в окне. Кнопка EN под абзацем показывает его прямо в тексте.
Содержание
Введение
Функция и примитивная структура данных в Lisp и других функциональных языках программирования Функция программирования Lisp
Function and primitive data structure in Lisp and other functional programming languages
the Lisp programming function
В компьютерном программировании, `cons` (произносится как /ˈkɒnz/ или /ˈkɒns/) является фундаментальной функцией в большинстве диалектов языка программирования Lisp. Она конструирует объекты памяти, которые содержат два значения или указатели на два значения. Эти объекты называются `cons`-ячейками, `cons`-ами, неатомарными выражениями ("NATSes") или `cons`-парами. В жаргоне Lisp выражение "to cons x onto y" означает построить новый объект с помощью `(cons x y)`. Полученная пара имеет левую часть, называемую `car` (первый элемент, или содержимое адресной части регистра), и правую часть, называемую `cdr` (второй элемент, или содержимое декрементной части регистра). Она слабо связана с объектно-ориентированным понятием конструктора, который создает новый объект на основе заданных аргументов, и более тесно связана с конструкторской функцией алгебраической системы типов данных. Слово "cons" и выражения вроде "to cons onto" также являются частью более широкого функционального жаргона программирования. Иногда операторы, выполняющие аналогичную функцию, особенно в контексте обработки списков, также называют "cons". (Хорошим примером является оператор `::` в ML, Scala, F#, Lean, Coq и Elm или оператор `:` в Haskell, который добавляет элемент в начало списка.)
In computer programming, ('/k//ɒ//n//z/ or '/k//ɒ//n//s/) is a fundamental function in most dialects of the Lisp programming language. constructs memory objects which hold two values or pointers to two values. These objects are referred to as (cons) cells, conses, non atomic s expressions ("NATSes"), or (cons) pairs. In Lisp jargon, the expression "to cons x onto y" means to construct a new object with (cons x y). The resulting pair has a left half, referred to as the (the first element, or contents of the address part of register), and a right half, referred to as the (the second element, or contents of the decrement part of register). It is loosely related to the object oriented notion of a constructor, which creates a new object given arguments, and more closely related to the constructor function of an algebraic data type system. The word "cons" and expressions like "to cons onto" are also part of a more general functional programming jargon. Sometimes operators that have a similar purpose, especially in the context of list processing, are pronounced "cons". (A good example is the :: operator in ML, Scala, F#, Lean, Coq, and Elm or the : operator in Haskell, which adds an element to the beginning of a list.)
Использование
Хотя ячейки cons могут использоваться для хранения упорядоченных пар данных, они чаще применяются для создания более сложных составных структур данных, таких как списки и двоичные деревья.
Although cons cells can be used to hold ordered pairs of data, they are more commonly used to construct more complex compound data structures, notably lists and binary trees.
Порядочные пары
Например, выражение Lisp создает ячейку, содержащую 1 в левой половине (так называемое поле `car`) и 2 в правой половине (поле `cdr`). В нотации Lisp значение выглядит так:
For example, the Lisp expression constructs a cell holding 1 in its left half (the so called field) and 2 in its right half (the field). In Lisp notation, the value looks like:
(1 . 2)
(1 2)
Обратите внимание на точку между 1 и 2; это указывает на то, что S-выражение является "пунктной парой" (так называемая "пара консов"), а не "списком".
Note the dot between 1 and 2; this indicates that the S expression is a "dotted pair" (a so called "cons pair"), rather than a "list."
Использование в разговоре
Минусы могут относиться к общему процессу выделения памяти, в отличие от использования деструктивных операций, характерных для императивного языка программирования. Например:
Cons can refer to the general process of memory allocation, as opposed to using destructive operations of the kind that would be used in an imperative programming language. For example:
Я немного ускорил код, добавив побочные эффекты вместо того, чтобы он чрезмерно выделял память.
I sped up the code a bit by putting in side effects instead of having it cons ridiculously.