Dans [1], Mitchell Wand a démontré que l'ajout de fexprs au calcul lambda pur banalise la théorie de l'équivalence contextuelle, ce qui signifie que deux termes sont contextuellement équivalents s'ils sont -congruents. En explorant le travail connexe, il est allé "notre résultat prolonge une vieille observation d'Albert Meyer [2] et rend l'équivalence contextuelle triviale". Mais en faisant référence à [2], ce qui a pu être trouvé n'est que la déclaration suivante de Meyer:eval
quote
J'ai d'abord pensé que dans les langages avec une fonction
quote
-eval
comme LISP [3], il n'y avait pas de distinction de type entre les objets syntaxiques et exécutables. En faitquote
-eval
semble assez sûr dans LISP parce que, bien quequote
syntaxiquement ressemble à un opérateur de bonne foi, comme disonscond
, il ne se comporte vraiment pas comme un (il n'a qu'un comportement au moment de l'analyse, pas au moment de l'exécution, par exemple, on ne peut pas passerquote
comme paramètre d'une procédure). Pourtant, je n'ai pas encore vu d'exemples convaincants où la fonctionnalitéquote
-eval
valait la peine.
Indépendamment d'une faille mineure dans ces commentaires qui peut induire le lecteur en erreur et déduire qui cond
pourrait être transmise comme paramètre à une procédure. Si je comprends bien, ce que Meyer a dit " quote
- eval
semble assez sûr" signifie que quote
- eval
peut ne pas banaliser la théorie équationnelle, bien qu'il n'ait pas fourni de preuve.
ÉDITER:
Comme l'a suggéré Martin, puisque les trois articles cités traitent des langues de la famille LISP, posons la question sous ce même cadre. L'équivalence contextuelle d'une langue avec quote
- eval
, en particulier LISP, sur terre est-elle triviale ou non?
[1] Mitchell Wand, The Theory of Fexprs Is Trivial . Lisp et Symbolic Computation 10 (3): 189-199 (1998).
[2] Albert Meyer, Puzzles in Programming Logic Workshop on Formal Software Development. 1984
[3] John McCarthy, fonctions récursives des expressions symboliques et leur calcul par la machine, la partie I . Communications de l'ACM en avril 1960.
la source
Réponses:
Tout d'abord, cela dépend entièrement de ce que vous considérez comme votre ensemble de contextes. Si
(quote [])
est un contexte, alors l'équivalence contextuelle est l'équivalence syntaxique.Traditionnellement, les contextes d'équivalence contextuelle sont considérés comme des contextes dans lesquels des "expressions", quelle que soit leur signification dans le langage, peuvent apparaître. Cela exclut les contextes comme
"[]"
, où le contexte place son argument à l'intérieur d'un littéral de chaîne. Ce type de contextes a également été exclu par l'IIRC lorsqu'il a décrit à l'origine la transparence référentielle.De ce point de vue, je pense que ce
(quote [])
n'est pas non plus un contexte. Au lieu de cela, les contextes sont les endroits où l'évaluation d'expression pourrait potentiellement se produire, comme dans le corps d'une fonction ou dans l'argument d'une application.Potentiellement, cela signifie que dans un programme Lisp avec des macros (ou un programme Racket ou Scheme), vous ne savez pas quels sont les contextes jusqu'à ce que vous exécutiez le processus d'expansion de macros potentiellement non terminatif, car vous ne savez même pas où les expressions sont. Que vous pensiez que ce soit un problème ou non est principalement une question philosophique plutôt que technique.
la source
(quote [])
, plutôt que des vœux pieux, un contexte: rejeter l'idée de traiter'datum
comme du sucre syntaxique pour(quote datum)
, alors'[]
, comme ce"[]"
n'est plus un contexte. Les macros de schéma ont dequote
toute façon été masquées .'datum
et(quote datum)
change-t-elle quelque chose?quote
c'est une construction de langage et'datum
desugars(quote datum)
, les gens soutiendront plus probablement que(quote [])
c'est un contexte. Si nous supprimonsquote
du langage de base, mais que nous prenons en charge la'datum
syntaxe littérale , ils le feront moins probablement parce que le similaire"[]"
est bien connu pour ne pas être un contexte."[]"
contexte, mais pas dans le(quote [])
contexte. Ce que les "gens" pourraient soutenir n'est ni ici ni là-bas.quote
de la syntaxe abstraite, mais de soutenir la syntaxe littérale (concrète) de la citation (insignifiante pour l'espace). D'après ce que je peux voir, les deux voies mènent à "Non" à la question d'origine.