W [1] Mitchell Wand wykazał, że dodanie fexprs do czystego rachunku lambda trywializuje teorię równoważności kontekstowej, co oznacza, że dwa terminy są równoważne kontekstowo, jeśli są zgodne. Badając pokrewną pracę, stwierdził: „nasz wynik rozszerza starą obserwację Alberta Meyera [2] i czyni banalną równoważność kontekstową”. Ale odnosząc się do [2], można znaleźć tylko następujące oświadczenie Meyera:eval
quote
Najpierw pomyślałem, że w językach z funkcją
quote
-eval
taką jak LISP [3] nie było rozróżnienia typów między obiektami składniowymi i wykonywalnymi. W rzeczywistościquote
-eval
wydaje się wystarczająco bezpieczny w LISP, ponieważ chociażquote
syntaktycznie wygląda jak operator bona fi de, powiedzmycond
, tak naprawdę nie zachowuje się jak jeden (ma zachowanie tylko w czasie analizy, a nie w czasie wykonywania, np. Nie można przejśćquote
jako parametr procedury). Nadal jednak nie widziałem przekonujących przykładów, w których warto było skorzystać z funkcjiquote
-eval
.
Niezależnie od jednej drobnej wady w tych komentarzach, która może wprowadzić czytelnika w błąd, aby wywnioskować, że cond
można go przekazać jako parametr procedury. Jeśli dobrze rozumiem, to, co powiedział Meyer „ quote
- eval
wydaje się wystarczająco bezpieczny” oznacza, że quote
- eval
może nie trywializować teorii równań, chociaż nie przedstawił dowodu.
EDYTOWAĆ:
Jak zasugerował Martin, ponieważ wszystkie trzy artykuły cytowały dotyczące języków rodzinnych LISP, postawmy pytanie w tym samym otoczeniu. Czy kontekstowa równoważność języka z quote
- eval
w szczególności LISP - na ziemi jest trywialna, czy nie?
[1] Różdżka Mitchella, teoria Fexprsa jest banalna . Lisp and Symbolic Computation 10 (3): 189-199 (1998).
[2] Albert Meyer, Warsztaty logiczne dotyczące programowania logicznego na temat formalnego tworzenia oprogramowania. 1984
[3] John McCarthy, rekurencyjne funkcje symbolicznego wyrazu i obliczeniach przez maszynę, część I . Komunikat ACM w kwietniu 1960 r.