'quote`-`eval'과 언어의 문맥 상 등가가 사소한가?


13

[1]에서 Mitchell Wand는 순수한 람다 미적분에 fexprs를 추가하면 문맥 상 동등성 이론을 상쇄한다는 것을 보여 주었다. 즉, 두 항이 일치 하면 문맥 상 동등 하다. 관련 작업을 탐험 할 때, 그는 "우리의 결과는 것을 알버트 마이어 이전 관찰 [2] 확장 갔다 와 상황에 맞는 등가 사소한 렌더링을". 그러나 [2]를 참조하면 찾을 수있는 것은 Meyer의 다음 진술뿐입니다.αevalquote

나는 Fi를 첫 번째는 언어로 된 생각 quote- eval같은 LISP와 같은 기능 [3] 구문과 실행 가능한 객체 사이에 형의 구별이 없었다. 실제로 quote- 구문 상으로는 진정한 연산자처럼 보이지만 실제로는 하나처럼 행동하지 않기 eval때문에 LISP에서 충분히 안전 해 quote보입니다 cond. 파싱 시간에는 동작 만 있고 실행 시간은 아닙니다. 예를 들어, 통과 할 수 없습니다. quote절차의 매개 변수로). 그럼에도 불구하고, 나는 예 설득 볼 아직 quote- eval기능 가치되었다.

이 의견에서 하나의 사소한 결함에 관계없이 독자가 cond절차에 매개 변수로 전달할 수 있다고 추측하도록 오도 할 수 있습니다. 만약 내가 제대로 이해하고, 무엇 메이어는 " quote- eval즉, 안전 충분한 것 같다" quote- eval등식 이론을 사소하지 않을 수 있습니다, 그가 증거를 제공하지 않았지만.

편집하다:

Martin이 제안한대로, 3 가지 논문 모두 LISP 패밀리 언어를 다루었다고 언급되었으므로, 동일한 환경에서 질문을하겠습니다. 와 언어의 문맥 등가인가 quote- eval특히 LISP에서, 땅에서 사소한 여부는?

[1] Fexprs의 이론 인 Mitchell Wand 는 사소 합니다. 리스프 및 기호 계산 10 (3) : 189-199 (1998).

[2] Albert Meyer, 공식 소프트웨어 개발에 관한 프로그래밍 논리 워크숍의 퍼즐 . 1984

[3] 존 맥카시, 기호 표현의 재귀 기능 및 기계에 의해 그들의 계산, 부 . 1960 년 4 월 ACM의 커뮤니케이션.


1
질문을보다 구체적으로 만들 수 있다면 고려할 것을 제안합니다 : 구조와 같은 평가 / 견적을 구현하는 다른 방법이 있으며 그러한 미적분에 대한 문맥 상 등가를 디자인하는 다양한 옵션이 있습니다. 흥미로운 최근의 관련 간행물은 Taou의 Inoue의 다단계 프로그램대한 추론 입니다.
Martin Berger

1
주요 차이점은 CTMP (템플릿 Haskell, Lisp / Scheme / Racket 및 Converge 로 예시 된 컴파일 타임 메타 프로그래밍 및 RTMP (Javascript eval 또는 MetaOCaml과 같은 런타임 메타 프로그래밍))입니다. . 여기에 .. 내가 몇 달이 난 두려워,이 주제에 매우 얕은을 백업 상황 동등성에 대해서는 준 개요 이야기, 약간의 작업이 주로 메타 프로그래밍을위한 지원 프로그램의 유체 상태로 소유 완료되었습니다입니다
마틴 버거

1
@ plmday : BTW ( Fexprs Is Trivial의 이론 에서 이상적인 프로그래밍 언어 완드 형식화)는 Lisp와 메타 프로그래밍과는 매우 다릅니다. 전자는 RTMP이고 후자는 구체적인 구현에 따라 다릅니다.
Martin Berger

1
@MartinBerger : 대화를 pdf로 게시 할 수 있습니까?
Dave Clarke

1
@ Dave Clarke, 여기 있습니다! 피드백 환영합니다.
Martin Berger

답변:


2

첫째, 이것은 전적으로 컨텍스트 세트가되기 위해 무엇을 취 하느냐에 달려 있습니다. 경우 (quote [])컨텍스트는 다음 상황에 맞는 동등성 구문 등가이다.

전통적으로, 문맥 상 등가에 대한 문맥은 언어에서 어떤 의미로든 "표현"이 나타날 수있는 문맥으로 간주됩니다. 이것은 "[]"컨텍스트가 인수를 문자열 리터럴 안에 넣는 위치 와 같은 컨텍스트를 배제합니다 . 이러한 종류의 맥락은 IIRC로, Quine가 원래 참조 투명성을 설명 할 때 배제했습니다.

이러한 관점에서, 나는 (quote [])또한 맥락이 아니라고 생각 합니다. 대신 컨텍스트는 함수 본문이나 응용 프로그램의 인수와 같이 식 평가가 발생할 수있는 위치입니다.

잠재적으로 문제가되는 것은 매크로가 포함 된 Lisp 프로그램 (또는 라켓 또는 구성표 프로그램)에서 잠재적으로 종결되지 않는 매크로 확장 프로세스를 실행할 때까지 컨텍스트가 무엇인지 알 수 없다는 것을 의미합니다. 아르. 이것이 문제라고 생각하든 아니든 기술적 인 문제가 아니라 철학적 인 문제입니다.


나는 제외 할 하나 개의 방법이 생각하지 않는 (quote [])치료의 아이디어를 기각 : 문맥으로, 오히려 소망 적 사고보다는 'datum위한 문법적으로 (quote datum)다음은, '[]등, "[]"더 이상 상황이다. quote어쨌든 구성표 매크로가 가려졌습니다 .

@day 님의 의견을 이해하지 못합니다. 왜 관계가 변화 'datum하고 (quote datum)있습니까?
Sam Tobin-Hochstadt

경우 quote언어 구조이며 'datum에 desugars (quote datum), 사람들은 가능성이 그 주장한다 (quote [])컨텍스트입니다. quote핵심 언어에서 제거 하지만 리터럴 'datum구문을 지원하는 경우 유사성 "[]"이 컨텍스트가 아닌 것으로 알려 지므로 논쟁의 여지가 적습니다 .

@day, 이것은 오해입니다. "컨텍스트"에 대한 올바른 정의는 없습니다. 서로 다른 맥락이 맥락 상 등가의 다른 개념을 지원한다는 것입니다. 예를 들어, 공백은 문맥 상 의미 적으로 중요 "[]"하지만 문맥에서는 중요 하지 않습니다 (quote []). "사람"이 주장 할 수있는 것은 여기도없고 거기도 없습니다.
Sam Tobin-Hochstadt

나는 문맥에 대한 올바른 정의가 없다는 것에 동의합니다. 그러나 추상 구문을 기반으로 한 전통적인 정의가 있습니다. 완드가 그의 논문에서 사용하고 Meyer가 그의 기사에서 사용하는 것은 Lisp의 문맥 상 등가의 상태에 대한 의문입니다. 당신이 제안한 것은 문맥의 전통적인 정의를 평가 문맥으로 대체하는 것입니다. 내가 제안한 것은 컨텍스트의 전통적인 정의를 유지하고 quote추상 구문을 제거 하지만 (공백하지 않은) 인용의 (콘크리트) 리터럴 구문을 지원하는 것입니다. 내가 볼 수 있듯이 두 가지 방법 모두 원래 질문에 "아니오"로 이어집니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.