ConsIl titolo di questa pagina non è corretto per via delle caratteristiche del software MediaWiki. Il titolo corretto è cons.
In informatica, cons è una funzione fondamentale dei dialetti Lisp. Essa costruisce (in inglese construct) in memoria oggetti contenenti due valori o puntatori a valore. Questi oggetti vengono chiamati celle cons, coppie cons o semplicemente cons. Nel gergo Lisp, l'espressione "fare il cons di Questa funzione è legata alla nozione di costruttore presente nella programmazione orientata agli oggetti, che crea un nuovo oggetto a partire da alcuni argomenti, e, più da vicino, è legata alla funzione costruttore dei sistemi a tipo dati algebrico. La parola "cons" e l'espressione "fare il cons su" vengono anche utilizzate più genericamente nel gergo della programmazione funzionale. A volte operatori che compiono una funzione simile, specialmente quando si lavora con le liste, sono pronunciati "cons". Un esempio è l'operatore UtilizzoSebbene le celle cons possano essere utilizzate per implementare coppie ordinate di dati, vengono più comunemente usate per costruire strutture dati più complesse, specialmente liste concatenate e alberi binari. Per esempio, l'espressione Lisp (1. 2) ListeIn Lisp, le liste vengono implementate a partire dalle coppie cons. Più specificamente, ogni struttura lista in Lisp può essere:
Ciò fornisce le fondamenta per una semplice struttura lista singolarmente concatenata, il cui contenuto può essere manipolato tramite
che è equivalente alla singola espressione: (cons 1 (cons 2 (cons 3 nil)))
o alla sua abbreviazione: (list 1 2 3)
Il valore risultante è la lista: (1. (2. (3. nil))) cioè *--*--*--nil | | | 1 2 3 generalmente abbreviata come: (1 2 3) Quindi, (5 1 2 3) Un'altra utile procedura per operare con le liste è AlberiAnche gli alberi binari, che conservano i dati nelle proprie foglie, sono facilmente costruibili tramite la funzione (cons (cons 1 2) (cons 3 4))
crea l'albero: ((1. 2) . (3. 4)) cioè * / \ * * / \ / \ 1 2 3 4 Tecnicamente, la lista *--*--*--nil | | | 1 2 3 nel seguente modo equivalente: * / \ 1 * / \ 2 * / \ 3 nil Uso colloquialeIl termine Non indispensabilitàDato che il Lisp possiede funzioni di prima classe (cioè funzioni che possono essere passate come parametri ad altre funzioni e possono essere restituite come valori di ritorno da altre funzioni), tutte le strutture dati, comprese le celle cons, non sono indispensabili al linguaggio, potendo essere implementate attraverso l'utilizzo di funzioni. Per esempio, il seguente codice 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)))
implementa gli operatori cons, car e cdr usando una funzione come "cella cons". Questo è il modo usuale di creare strutture dati nel lambda calcolo puro, un modello di computazione teorico astratto che è legato da vicino allo Scheme. Questa implementazione, nonostante sia interessante dal punto di vista teorico, non ha però interessi pratici, in quanto rende le celle cons indistinguibili dalle ordinarie procedure Scheme, oltre ad introdurre inutili inefficienze computazionali. Voci correlateCollegamenti esterni
|