L'equivalenza contestuale di una lingua con `quote` -`eval` è banale o no?


13

In [1], Mitchell Wand ha dimostrato che l'aggiunta di fexprs al puro calcolo lambda banalizza la teoria dell'equivalenza contestuale, il che significa che due termini sono contestualmente equivalenti se sono congruenti. Quando esplorando collegato lavoro, è andato "il nostro risultato si estende una vecchia osservazione di Albert Meyer [2] che e rendono l'equivalenza contestuale banale". Ma riferendosi a [2], ciò che potrebbe essere trovato è solo la seguente dichiarazione di Meyer:αevalquote

Ho pensato per la prima volta che nei linguaggi con una quote- evalcaratteristica come LISP [3] non vi era alcuna distinzione di tipo tra oggetti sintattici ed eseguibili. In effetti quote- evalsembra abbastanza sicuro in LISP perché, sebbene quotesintatticamente sembri un operatore in buona fede, come dire cond, in realtà non si comporta come uno (ha solo un comportamento in fase di analisi, non in fase di esecuzione, ad esempio, non si può passare quotecome parametro per una procedura). Tuttavia, devo ancora vedere esempi convincenti in cui la funzione quote- evalè valsa la pena.

Indipendentemente da un piccolo difetto in questi commenti che può indurre in errore il lettore a dedurre che condpotrebbe essere passato come parametro a una procedura. Se ho capito bene, ciò che Meyer ha detto " quote- evalsembra abbastanza sicuro" significa che quote- evalpotrebbe non banalizzare la teoria equazionale, sebbene non abbia offerto una prova.

MODIFICARE:

Come suggerito da Martin, poiché tutti e tre i documenti citati trattano le lingue della famiglia LISP, mettiamo la domanda in questa stessa impostazione. L'equivalenza contestuale di una lingua con quote- eval, in particolare LISP, sulla terra è banale o no?

[1] Mitchell Wand, The Theory of Fexprs Is Trivial . Lisp and Symbolic Computation 10 (3): 189-199 (1998).

[2] Albert Meyer, Puzzle in Laboratorio di logica di programmazione sullo sviluppo di software formale. 1984

[3] John McCarthy, funzioni ricorsive di espressioni simboliche e loro calcolo a macchina, parte I . Comunicazioni dell'ACM nell'aprile 1960.


1
Suggerirei di considerare se si potesse rendere la domanda più specifica: ci sono diversi modi di implementare eval / quote come costrutti e varie opzioni nella progettazione di equivalenze contestuali per tali calcoli. Un'interessante recente pubblicazione correlata è Reasoning About Multi-Stage Programs di Inoue, Taha.
Martin Berger,

1
La distinzione chiave è tra CTMP (meta-programmazione in fase di compilazione, come esemplificato da Template Haskell, Lisp / Scheme / Racket e Converge , e RTMP (meta-programmazione run-time come JavaScript's eval o MetaOCaml). Un altro parametro è la digitazione . Qui è un discorso generale ho dato qualche mese fa su questo argomento, poco profondo temo per quanto riguarda le equivalenze contestuali, poco lavoro è stato fatto, per lo più in possesso allo stato fluido di programmare il supporto per meta-programmazione..
Martin Berger

1
@ plmday: BTW, il linguaggio di programmazione idealizzato La bacchetta si formalizza in The Theory of Fexprs Is Trivial è molto diversa dalla meta-programmazione di Lisp. Il primo è RTMP, il secondo (a seconda delle implementazioni concrete) no.
Martin Berger,

1
@MartinBerger: puoi pubblicare i tuoi interventi in pdf?
Dave Clarke,

1
@ Dave Clarke, certo, eccolo qui ! Feedback di benvenuto.
Martin Berger,

Risposte:


2

Innanzitutto, questo dipende interamente da ciò che consideri il tuo insieme di contesti. Se (quote [])è un contesto, allora l'equivalenza contestuale è equivalenza sintattica.

Tradizionalmente, i contesti di equivalenza contestuale sono considerati contesti in cui possono apparire "espressioni", in qualunque significato abbia nella lingua. Questo esclude contesti come "[]", in cui il contesto colloca il suo argomento all'interno di una stringa letterale. Questi tipi di contesti erano anche, IIRC, esclusi da Quine quando in origine descriveva la trasparenza referenziale.

Da questo punto di vista, penso che non (quote [])sia anche un contesto. Al contrario, i contesti sono i luoghi in cui potrebbe potenzialmente verificarsi la valutazione dell'espressione, ad esempio nel corpo di una funzione o nell'argomento di un'applicazione.

Potenzialmente in modo problematico, ciò significa che in un programma Lisp con macro (o un programma Racket o Scheme) non sai quali siano i contesti fino a quando non esegui il processo di espansione macro potenzialmente non terminante, perché non sai nemmeno dove le espressioni siamo. Se pensi che questo sia un problema o meno, è principalmente una questione filosofica piuttosto che tecnica.


Penso che ci sia un modo per escludere (quote []), piuttosto che un pio desiderio, come un contesto: respingere l'idea di trattare 'datumcome zucchero sintattico per (quote datum), quindi '[], poiché "[]"non è più un contesto. Le macro degli schemi sono quotecomunque oscurate .
giorno

Non capisco il tuo commento, @giorno. Perché la relazione tra 'datume (quote datum)cambia qualcosa?
Sam Tobin-Hochstadt,

Se quoteè un costrutto linguistico e 'datumdesugars a (quote datum), le persone probabilmente sosterranno che (quote [])è un contesto. Se rimuoviamo quotedal linguaggio di base, ma supportiamo la 'datumsintassi letterale , allora probabilmente lo discuteranno perché il simile "[]"è noto per non essere un contesto.
giorno

@day, questo è un malinteso. Non esiste una definizione corretta di "contesto". È solo che contesti diversi supportano nozioni diverse di equivalenza contestuale. Ad esempio, gli spazi bianchi sono semanticamente significativi nel "[]"contesto, ma non nel (quote [])contesto. Ciò che "la gente" potrebbe discutere non è né qui né là.
Sam Tobin-Hochstadt,

Concordo sul fatto che non esiste una definizione corretta di contesto. Ma esiste una definizione tradizionale basata sulla sintassi astratta, quella che Wand usa nel suo articolo e Meyer usa nel suo articolo, per mettere in discussione lo stato di equivalenza contestuale di Lisp. Quello che hai suggerito è sostituire la definizione tradizionale di contesto con il contesto di valutazione. Quello che ho suggerito è mantenere la definizione tradizionale di contesto, rimuovendo quotedalla sintassi astratta, ma supportando la sintassi (concreta) letterale della citazione (spazio-insignificante). Da quello che posso vedere, entrambi i modi portano a "No" alla domanda originale.
giorno
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.