Cons

В программировании cons (/ ˈkɒnz / или / ˈkɒns /) является фундаментальной функцией в большинстве диалектов языка программирования Лисп. cons создает объекты памяти, которые содержат два значения или два указателя на значения[1]. Название функции было образовано как сокращение от слова construct, то есть конструирование. Имелось ввиду, что cons конструирует в памяти новый объект из имеющихся двух. Эти объекты также называют cons-ячейками, cons-ами, неатомарными S-выражениями («NATS») или cons-парами. В английском языке, в жаргоне ЛИСП-программистов, слово cons используется также в качестве глагола. Выражение «to cons x onto y» равнозначно «сконструировать новый объект при помощи следующего кода: (cons x y)».

Среди пользователей функциональных языков программирования и в контексте работы со списками, «cons» также используется как жаргонное наименование аналогичных по назначению операторов аналогичного назначения, которые записываются совершенно по-другому. Хорошими примерами являются операторы :: в языках ML, Scala, F# и Elm или оператор : в языке Haskell, которые добавляют элемент в голову списка.

Использование

Хотя cons-ячейки могут использоваться для того, чтобы хранить упорядоченные пары данных, они чаще используются для построения более сложных составных структур данных, в частности списков и двоичных деревьев.

Упорядоченные пары

Например, выражение Лиспа (cons 1 2) конструирует ячейку, содержащую 1 в своей левой половине (так называемое поле car) и 2 в правой половине (поле cdr). В нотации Лиспа значение (cons 1 2) выглядит так:

(1. 2)

Обратите внимание на точку между 1 и 2; это указывает на то, что S-выражение является «точечной парой» (так называемая «cons-пара»), а не «списком».

Списки

диаграмма cons-ячеек для списка (42 69 613), созданного при помощи функции cons:
(cons 42 (cons 69 (cons 613 nil)))
или записанного как список:
(list 42 69 613)

В Лиспе списки реализованы поверх cons-пар. Конкретнее, структура любого списка в Лиспе выглядит следующим образом:

  1. Пустой список, обозначаемый как (), является специальным объектом. Его также обычно называют nil.
  2. Список из одного элемента представляет собой cons-пару, в первой ячейке которой присутствует его единственный элемент, а вторая ссылается на nil.
  3. Список из двух и более элементов представляет собой cons-пару, первый элемент которой является первым элементом списка, а вторая ссылается на список, являющийся хвостом основного списка.

Показанное представление является простейшей формой однонаправленного списка, с содержимым которого легко манипулировать при помощи команд cons, car, cdr. Например, представим список с элементами 1, 2 и 3. Такой список может быть создан в три шага:

   Cons (3 nil)    
   Cons (2 результат предыдущей операции)
   Cons (1 результат предыдущей операции)

или то же самое, одним выражением:

(cons 1 (cons 2 (cons 3 nil)))

та же последовательность операций cons представляется сокращённо:

(list 1 2 3)

в результате мы создаем список:

(1 . (2 . (3 . nil)))

со следующей структурой:

 *--*--*--nil
 |  |  |
 1  2  3

сокращённо он может быть записан следующим образом:

(1 2 3)

Исходя из вышенаписанного, cons можно использовать для добавления нового элемента в начало существующего связанного списка. Например, если x — это список, который мы определили выше, то (cons 5 x) создаст список:

(5 1 2 3)

Деревья

Бинарные деревья, которые хранят данные только в своих листьях, также легко реализуются при помощи cons. Пример:

(cons (cons 1 2) (cons 3 4))

создаёт представление дерева в виде списка:

((1 . 2) . (3 . 4))

то есть

   *
  / \
 *   *
/ \ / \
1 2 3 4

Технически список (1 2 3) в предыдущем примере также является несбалансированным двоичным деревом. Чтобы убедиться в этом, просто перерисуем диаграмму

 *--*--*--nil
 |  |  |
 1  2  3

в эквивалентную:

   *
  / \
 1   *
    / \
   2   *
      / \
     3  nil

Функциональная реализация

Поскольку Lisp включает функции первого класса, все структуры данных, включая cons-ячейки, могут быть реализованы с использованием функций. Пример на языке Scheme:

(define (cons x y)
  (lambda (m) (m x y)))
(define (car z)
  (z (lambda (p q) p)))
(define (cdr z)
  (z (lambda (p q) q)))

Эта техника известна как «кодирование Чёрча». Она позволяет переопределить реализацию операций cons, car[англ.] и cdr[англ.] с использованием «cons-ячеек». Кодирование Чёрча — это обычный способ определения структур данных в чистом лямбда-исчислении.

Такая реализация, хотя и интересна с академической точки зрения, непрактична, поскольку она делает cons-ячейки неотличимыми от любой другой процедуры языка Scheme, а также вносит ненужную вычислительную неэффективность. Впрочем, такой же подход может использоваться для более сложных алгебраических типов данных с вариантами. В этом случае, он, действительно, может оказаться более эффективным, чем другие способы представления данных в памяти[2].

См. также

Примечания

  1. Е.И.Большакова, Н. В.Груздева. Основы программирования на языке Лисп. — Москва: Издательский отдел факультета ВМК МГУ имени М.В.Ломоносова; МАКС Пресс, 2010, 2010.
  2. Archived copy. Дата обращения: 1 марта 2009. Архивировано из оригинала 31 марта 2010 года.

Ссылки

  • SDRAW, Код на Common Lisp, предназначенный для отрисовки структур данных, составленных из cons-ячеек. Автор — David S. Touretzky.

Read other articles:

Girls SquadBerkas:The new Poster Girls Squad.jpegGenreAcara realitasPembuatNetverse OriginalPresenterBerlian AuraPaula AndreaMarella MulwantoNegara asal IndonesiaBahasa asliBahasa IndonesiaBahasa InggrisProduksiDurasi36-44 menit (Netverse)60 menit (NET.)Rumah produksiNET. EntertainmentDistributorNet Media DigitalNet Visi MediaRilis asliJaringan Netverse(1 April-1 Juli 2023) NET.(19 Mei-30 Juni 2023) Format gambarHDTV (1080i 16:9)Format audioDolby Digital 5.1Rilis1 April (2023-04-01...

 

Wakil Bupati Pulau TaliabuPetahanaRamlisejak 26 Februari 2021Masa jabatan5 tahun dan dapat dipilih kembali untuk satu kali masa jabatanDibentuk17 Februari 2016; 8 tahun lalu (2016-02-17)Pejabat pertamaRamliSitus webSitus web resmi Berikut adalah daftar Wakil Bupati Pulau Taliabu secara definitif sejak tahun 2016. Nomor urut Wakil Bupati Potret Partai Awal Akhir Masa jabatan Periode Bupati Ref. 1   Ramli(lahir 1959) Non Partai 17 Februari 2016 26 September 2020 4 tahun, 222...

 

Series of social psychology experiments For Milgram's other well-known experiment, see Small-world experiment. Obedience to Authority redirects here. For the book, see Obedience to Authority: An Experimental View. The experimenter (E) orders the teacher (T), the subject of the experiment, to give what the teacher (T) believes are painful electric shocks to a learner (L), who is actually an actor and confederate. The subject is led to believe that for each wrong answer, the learner was receivi...

Questa voce o sezione sull'argomento Competizioni calcistiche non è ancora formattata secondo gli standard. Commento: Si invita a seguire il modello di voce.Il mancato rispetto del modello di voce comporterà la cancellazione di ogni edit col ripristino della pagina precedente. Contribuisci a migliorarla secondo le convenzioni di Wikipedia. Segui i suggerimenti del progetto di riferimento. Questa voce o sezione sull'argomento edizioni di competizioni calcistiche non cita le fonti ...

 

Animals that lay their eggs, with little or no other embryonic development within the mother Eggs of various animals (mainly birds) Oviparous animals are animals that reproduce by depositing fertilized zygotes outside the body (known as laying or spawning) in metabolically independent incubation organs known as eggs, which nurture the embryo into moving offsprings known as hatchlings with little or no embryonic development within the mother. This is the reproductive method used by most animal...

 

Halaman ini berisi artikel tentang kota di Italia. Untuk gaya sulam, lihat sulaman Assisi. Untuk meteorit tahun 1886, lihat Assisi (meteorit). AssisiKomuneComune di AssisiPanorama Assisi BenderaNegaraItaliaWilayahUmbriaProvinsiPerugia (PG)FrazioniArmenzano, Capodacqua, Castelnuovo, Palazzo, Petrignano, Rivotorto, Santa Maria degli Angeli, San Vitale, Sterpeto, Torchiagina, Tordandrea, Tordibetto, Col d'Erba, Col d'Erba III, Collicello, Passaggio di Assisi, Pian della Pieve, Pieve San Nicolò,...

For sitting justices of the Supreme Court of India, see List of sitting judges of the Supreme Court of India. This article needs additional citations for verification. Please help improve this article by adding citations to reliable sources. Unsourced material may be challenged and removed.Find sources: List of former judges of the Supreme Court of India – news · newspapers · books · scholar · JSTOR (October 2023) (Learn how and when to remove this me...

 

Voce principale: Associazione Calcio Milan. Milan FBCCStagione 1905-1906 Sport calcio Squadra Milan Allenatore Herbert Kilpin Presidente Alfred Edwards Prima Categoria1º Torneo FGNIVincitore Palla DapplesVincitore (3 volte) Coppa LombardiaVincitore Maggiori presenzeCampionato: 6 giocatori (6) Miglior marcatoreCampionato: Pedroni (3)Totale: Pedroni (4) StadioCampo Milan di Porta Monforte 1904-1905 1906-1907 Si invita a seguire il modello di voce Questa voce raccoglie le informazioni rig...

 

Reichsminister for Bohemia and Moravia, SS-Obergruppenführer Karl Hermann Frank(c. 1941)Minister of State for Bohemia and MoraviaIn office20 August 1943 – 8 May 1945LeaderAdolf Hitler (as Führer) Personal detailsBorn(1898-01-24)24 January 1898Karlsbad, Kingdom of Bohemia, Austria-HungaryDied22 May 1946(1946-05-22) (aged 48)Pankrác Prison, Prague, CzechoslovakiaCause of deathExecution by hangingResting placeĎáblice Cemetery, Prague, CzechoslovakiaPolitical partyD...

Частина серії проФілософіяLeft to right: Plato, Kant, Nietzsche, Buddha, Confucius, AverroesПлатонКантНіцшеБуддаКонфуційАверроес Філософи Епістемологи Естетики Етики Логіки Метафізики Соціально-політичні філософи Традиції Аналітична Арістотелівська Африканська Близькосхідна іранська Буддій�...

 

Symbols used in pre-19th-century chemistry This article contains Unicode alchemical symbols. Without proper rendering support, you may see question marks, boxes, or other symbols instead of alchemical symbols. A table of alchemical symbols from Basil Valentine's The Last Will and Testament, 1670 Alchemical symbols before Lavoisier Alchemical symbols were used to denote chemical elements and compounds, as well as alchemical apparatus and processes, until the 18th century. Although notation...

 

Economic sector in the United Kingdom A combine harvester in Scotland Agriculture in the United Kingdom uses 69% of the country's land area, employs 1% of its workforce (471,000 people)[1][2] and contributes 0.5% of its gross value added (£11.2 billion).[3] The UK currently produces about 54% of its domestic food consumption.[4] Agricultural activity occurs in most rural locations. It is concentrated in the drier east (for crops) and the wetter west (for lives...

French lawyer and professor of philosophy Théodore SteegMinister of StateIn office13 March 1938 – 10 April 1938Prime MinisterLéon BlumPrime Minister of FranceIn office13 December 1930 – 27 January 1931PresidentGaston DoumerguePreceded byAndré TardieuSucceeded byPierre LavalMinister of the ColoniesIn office18 January 1938 – 13 March 1938Prime MinisterHimselfPreceded byFrançois PiétriSucceeded byPaul ReynaudIn office13 December 1930 – 27 January ...

 

High-intensity electric light with a broad beam For other uses, see Floodlight (disambiguation). This article has multiple issues. Please help improve it or discuss these issues on the talk page. (Learn how and when to remove these template messages) This article needs additional citations for verification. Please help improve this article by adding citations to reliable sources. Unsourced material may be challenged and removed.Find sources: Floodlight – news · newspape...

 

American actor (1926–2014) This article needs additional citations for verification. Please help improve this article by adding citations to reliable sources. Unsourced material may be challenged and removed.Find sources: Craig Hill actor – news · newspapers · books · scholar · JSTOR (April 2014) (Learn how and when to remove this message) Craig HillCraig Hill as Clayton in Lo voglio mortoBornCraig Hill Fowler[1](1926-03-05)March 5, 1926...

Village in Estonia Village in Tartu County, EstoniaSassukvereVillageCoordinates: 58°42′45″N 27°06′12″E / 58.7125°N 27.103333333333°E / 58.7125; 27.103333333333Country EstoniaCountyTartu CountyParishPeipsiääre ParishTime zoneUTC+2 (EET) • Summer (DST)UTC+3 (EEST) Sassukvere is a village in Peipsiääre Parish, Tartu County in Estonia.[1] References ^ Classification of Estonian administrative units and settlements 2014[dead link...

 

Town in Pardubice, Czech RepublicČeská TřebováTownStaré Square FlagCoat of armsČeská TřebováLocation in the Czech RepublicCoordinates: 49°54′7″N 16°26′50″E / 49.90194°N 16.44722°E / 49.90194; 16.44722Country Czech RepublicRegionPardubiceDistrictÚstí nad OrlicíFirst mentioned1278Government • MayorZdeněk ŘehákArea • Total41.01 km2 (15.83 sq mi)Elevation375 m (1,230 ft)Population (2024-0...

 

German classical scholar and antiquarian (1785–1867) August BöckhBorn24 November 1785 (1785-11-24)Karlsruhe, Margraviate of BadenDied3 August 1867 (1867-08-04) (aged 81)Berlin, German ConfederationNationalityGermanOther namesAugust BoeckhAwardsPrussian Academy of SciencesAcademic backgroundAlma materUniversity of HalleAcademic advisorsJohann August Ernesti[1]Friedrich Schleiermacher[1]InfluencesFriedrich Schleiermacher[2]Friedrich August WolfAcad...

RHOBTB2 معرفات أسماء بديلة RHOBTB2, DBC2, Rho related BTB domain containing 2, EIEE64, p83, DEE64 معرفات خارجية الوراثة المندلية البشرية عبر الإنترنت 607352 MGI: MGI:2180557 HomoloGene: 22873 GeneCards: 23221 علم الوجود الجيني وظائف جزيئية • nucleotide binding• GTP binding• ‏GO:0001948، ‏GO:0016582 ربط بروتيني• ‏GO:0006184 GTPase activity• protein kinase binding مكونات خل...

 

جزء من سلسلة مقالات حولالإسلام العقيدة الإيمان توحيد الله  الإيمان بالملائكة الإيمان بالكتب السماوية الإيمان بالرسل والأنبياء الإيمان باليوم الآخر الإيمان بالقضاء والقدر أركان الإسلام شهادة أن لا إله إلا الله وأن محمد رسول الله إقامة الصلاة  إيتاء الزكاة  صوم رم�...