Bir dilin `` alıntı '' `` '' ile bağlamsal denkliği önemsiz mi değil mi?


13

[1] 'de, Mitchell Wand, saf lambda hesabına fexprs eklemenin, bağlamsal eşdeğerlik teorisini önemsizleştirdiğini, yani iki terimin, eşdeğer oldukları sürece bağlamsal olarak eşdeğer olduğunu gösterdi. İlgili çalışmaları incelerken, "sonucumuz eski bir Albert Meyer gözlemini genişletiyor ve bağlamsal eşdeğerliği önemsiz hale getiriyor " dedi. Ancak [2] 'ye atıfta bulunulabilecek şey, Meyer tarafından sadece şu ifadedir:αevalquote

Hazırlık I birinci bir ile dilde olduğu düşünülmektedir quote- evalörneğin Lisp'i gibi özellik [3] yapısal ve yürütülebilir nesne arasında bir tür bir fark vardı. Aslında quote- evalLISP'de yeterince güvenli görünüyor, çünkü quotesözdizimsel olarak iyi niyetli bir operatöre benzese de, örneğin cond, gerçekten bir gibi davranmıyor (sadece ayrıştırma zamanında davranıyor, zaman değil, örneğin geçemiyor quotebir prosedüre parametre olarak). Yine de, quote- evalözelliğinin değerli olduğu inandırıcı örnekleri görmedim .

Bu yorumlardaki küçük bir kusurdan bağımsız olarak, okuyucuyu condbir prosedüre parametre olarak geçirilebilecek çıkarım yapmaya yöneltebilir . Doğru anladıysam ne Meyer söyledi " quote- evalaraçlarının bu güvenli yeterli görünüyor" quote- evaldenklemsel teorisini trivialise olmayabilir, o bir kanıt sunmadı rağmen.

DÜZENLE:

Martin'in önerdiği gibi, üç makalenin tamamı LISP aile dilleri ile ilgili olarak atıfta bulunduğundan, soruyu aynı ayarın altına koyalım. Bir dilin quote- evalözellikle de LISP ile - yeryüzünde bağlamsal denkliği önemsiz midir yoksa değil midir?

[1] Mitchell Wand, Fexprs Teorisi önemsizdir . Lisp ve Sembolik Hesaplama 10 (3): 189-199 (1998).

[2] Albert Meyer, Resmi Yazılım Geliştirme Mantığı Programlama Bulmacaları . 1984

[3] John McCarthy, Sembolik İfadelerin Özyineli Fonksiyonlar ve Makine tarafından Onların Hesaplama, Bölüm I . ACM'nin Nisan 1960'taki iletişimi.


1
Soruyu daha spesifik hale getirip getiremeyeceğinizi düşünmenizi öneririm: eval / quote gibi yapıyı uygulamak için farklı yollar ve bu tür hesaplar için bağlamsal eşdeğerlikler tasarlamada çeşitli seçenekler vardır. İlginç bir yeni ilgili yayın Inoue, Taha tarafından Çok Aşamalı Programlar Hakkında Akıl Yürütme .
Martin Berger

1
Temel ayrım CTMP (Template Haskell, Lisp / Scheme / Racket ve Converge ile örneklendiği gibi derleme zamanı meta-programlama ve RTMP (Javascript eval, veya MetaOCaml gibi çalışma zamanı meta-programlama) arasındadır. . Burada .. Ben birkaç ay korkarım bu konuda oldukça sığ geri bağlamsal eşdeğerlikleri ilişkin verdi bir bakış konuşma, az iş çoğunlukla meta programlama için destek programlama sıvı durumuna sahip, yapılmış olan
Martin Berger

1
@ plmday: BTW, İdeal programlama dili Wand'ın Fexprs Teorisi'nde resmileştirmesi önemsizdir Lisp'in meta programlamasından oldukça farklıdır. Birincisi RTMP'dir, ikincisi (somut uygulamalara bağlı olarak) değildir.
Martin Berger

1
@MartinBerger: Konuşmanızı pdf olarak gönderebilir misiniz?
Dave Clarke

1
@ Dave Clarke, tabi, işte burada ! Geribildirim hoş geldiniz.
Martin Berger

Yanıtlar:


2

İlk olarak, bu tamamen bağlam setiniz olarak neye ihtiyacınız olduğuna bağlıdır. Eğer (quote [])bir bağlamsa, o zaman bağlamsal eşdeğerlik sözdizimsel eşdeğerliktir.

Geleneksel olarak, bağlamsal eşdeğerlik bağlamları, dilde ne anlama gelirse gelsin, "ifadelerin" ortaya çıkabileceği bağlamlar olarak kabul edilir. Bu "[]", bağlamın bağımsız değişkenini bir dize değişmezinin içine yerleştirdiği gibi bağlamları dışlar. Bu tür bağlamlar, başlangıçta referans şeffaflığı tanımladığında Quine tarafından dışlanan IIRC idi.

Bu açıdan, bence (quote [])bir bağlam da değil. Bunun yerine, bağlamlar, bir fonksiyonun gövdesi veya bir uygulamanın argümanında olduğu gibi, ifade değerlendirmesinin potansiyel olarak gerçekleşebileceği yerlerdir.

Potansiyel olarak sorunlu olarak, bu, makroları içeren bir Lisp programında (veya bir Raket veya Şema programında), potansiyel olarak sonlandırıcı olmayan makro genişletme işlemini çalışana kadar bağlamların ne olduğunu bilmediğiniz anlamına gelir, çünkü ifadelerin nerede olduğunu bile bilmiyorsunuzdur. vardır. Bunun bir sorun olup olmadığını düşünmek, teknik olmaktan ziyade çoğunlukla felsefi bir sorudur.


Ben dışlamak için bir yolu var sizce (quote [])tedavi fikrini bırakmak: Bir bağlam olarak değil, hüsnükuruntu daha 'datumiçin sözdizimsel şeker gibi (quote datum), sonra '[]sıra, "[]"artık bir bağlamıdır. Şema makroları quoteyine de gizlendi .
gün

Yorumunu anlamıyorum, @day. Neden arasındaki ilişki 'datumve (quote datum)değişim şey var mı?
Sam Tobin-Hochstadt

Eğer quotebir dil 'datumkurgusu ve desugarsa (quote datum), insanlar bunun (quote [])bir bağlam olduğunu daha fazla iddia edeceklerdir . Biz kaldırırsanız quoteçekirdek dilinden ancak edebi destekleyen 'datumsözdizimi benzer, çünkü o zaman daha az olası yüzden iddia edecektir "[]"edilir iyi bilinen bir bağlam olması.
gün

@gün, bu bir yanlış anlama. "Bağlam" için doğru bir tanım yoktur. Farklı bağlamlar farklı bağlamsal eşdeğerlik kavramlarını destekliyor. Örneğin, beyaz alan "[]"bağlamda anlamsal olarak önemlidir , ancak bağlamda anlamsızdır (quote []). "İnsanların" tartışabileceği şey ne burada ne de oradadır.
Sam Tobin-Hochstadt

Bağlamın tek bir doğru tanımı olmadığına katılıyorum. Ancak soyut sözdizimine dayanan geleneksel bir tanım vardır, Wand'ın makalesinde kullandığı ve Meyer makalesinde, Lisp'in bağlamsal eşdeğerliğinin durumunu sorgulamak için kullanır. Önerdiğiniz şey, geleneksel bağlam tanımını değerlendirme bağlamıyla değiştirmektir. Önerdiğim, bağlamın geleneksel tanımını tutmak, quotesoyut sözdiziminden çıkarmak , ancak (boşluk-önemsiz) tırnak (somut) gerçek sözdizimini desteklemek. Görebildiğim kadarıyla, her iki yol da orijinal soruya "Hayır" götürür.
gün
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.