Scheme'nin call / cc'si bilinen tüm kontrol akış yapılarını uygulayabilir mi?


13

Sayfa "Gelişmiş Şeması: Bazı Yaramaz Bit" devletler:

Devamlar, hemen hemen tüm diğer kontrol akışı yapılarının [...] türetilebileceği güçlü bir kontrol akışı yapısıdır.

call/ccPeter Landin'in J operatörü ile ilişkili (*) olan Scheme's'in bilinen herhangi bir kontrol akış yapısını uygulamak için kullanılabileceğini düşündüm.

"Kontrol akış yapısı" ile, özellikle Wikipedia'nın bunlarla ilgili açıklamalarını , örneğin istisnalar, koroutinler, yeşil iplikler vb.

Özellikle, kontrol akış yapılarının herhangi örnekler vardır edemez kullanılarak uygulanabilir call/cc?

(*) call/ccJ operatörü kadar güçlü bir kağıt açamadım. Felleisen tarafından yazılan (okuduğum ve kabul ettiğim gibi tam olarak anlamakta sorun yaşadığım) bir makale bunu araştırıyor ve farklı karmaşıklık sınıflarında olmalarına rağmen resmen eşdeğer oldukları sonucuna varıyor gibi görünüyor.

(Ayrıca, aşağıdaki yorumlara dayanarak soruyu güncellediğimi de unutmayın)

Güncelleme

Aşağıdaki @Neel'in mükemmel cevabına dayanarak, sınırlandırılmış ve sınırlandırılmamış süreklilikler hakkında yorum yapan sitelere baktım ve gerçekten call/ccde sınırsız olmak yeterli değil gibi görünüyor . Bu sırada, birinci sınıf, ayrılmış (benzeri uzantılar shift/reset) olabilir herhangi bir kontrol akış yapısını ifade ederken, bu gibi görünüyor, kullanılabilir.


5
"Kontrol akış yapısı" nın resmi tanımı nedir?
Huck Bennett

4
Re: sınırsız devamlar. Hayo Thielecke'nin referansını okudunuz mu? Gerçek hasar undelimited uzanımlar olmasıdır tarafından sağlanancall/cc durumlar ifade edemez halde yokluğunda . (Thielecke'nin işaret ettiği gibi, istisnalar biri program için diğeri istisna işleyici için olmak üzere iki devam yoluyla geçirilerek uygulanabilir, ancak bu sadece daha fazlasını gerektirir call/cc.)
rici

@Rici: Sadece ilk birkaç sayfayı gözden kaçırdım. (Makaleleri okumak beni uzun zaman alıyor). Yorum için teşekkürler!
csl

@HuckBennett Resmi bir tanımım yok, ama gayri resmi olarak en.wikipedia.org/wiki/Control_flow adresinde açıklanan şeyi kastediyorum - özellikle de coutineleri ifade etmek ve daha da önemlisi uygulamak için süreklilikleri kullanabileceğinizi, yeşil iş parçacıkları, istisnalar, escape-ifadeleri, amb-operator, vb.
csl

2
@csl "Akış kontrol yapısının" ne anlama geldiğini daha kesin hale getirmenin yanı sıra, bir şeyi "ifade etmenin" ne anlama geldiğini de daha açık bir şekilde ifade etmeniz gerekir. Bu zor bir sorundur ve sorunuzun cevabı, ifade olarak neyi saydığınıza bağlıdır. Sonuçta, her zaman bir şekilde bir dilin yorumlayıcısını istisnalar (örneğin Java) ile kodlayan bir Turing makinesini kodlayabilirsiniz. Ancak muhtemelen aklınızda olan şey bu değildir, bu nedenle "ifade" kavramı (örneğin kompozisyon ve / veya tam soyutlama) üzerinde güçlü kısıtlamalar koymanız gerekir.
Martin Berger

Yanıtlar:


11

Bu cevapta, Programlama Dillerinin Etkileyici Gücü Üzerine Felleisen 1991 anlamında "makro-ifade edilebilir" anlamına gelen "ifade" edeceğim . (Sezgisel olarak, bir dil özelliği, tüm program dönüşümü kullanmadan yerel bir kaynak dönüşümü olarak tanımlayabiliyorsanız makro tarafından ifade edilebilir.)

Bu tanım ile cevap hayır : sınırlı kontrol lambda-calculus + call / cc'de makro-ifade edilemez. Sınırlı kontrol operatörlerini call / cc kullanarak ifade etmek. Kontrol sınırlayıcıları (kaydırma / sıfırlamanın sıfırlama kısmı) uygulamak için, devam işaretlerini simüle etmek için, esas olarak devam işaretlerinin dinamik ömürlerini simüle etmek için bir yığını kodlamak için bazı durumlara ihtiyacınız vardır.

Bununla birlikte, sınırlandırılmış kontrol aşağıdaki anlamda evrensel bir etkidir. Onun içinde doktora tezi , Andrzej Filinski herhangi eksprese yan etki ya da ayrılmış devamlılık veya arama / cc ve devlet tek bir hücre ile kodlanabilen olduğunu göstermiştir. Kabaca, "ifade edilebilir bir yan etki", monadik tipi, programlama dili türleri açısından tanımlanabilen herhangi bir etkidir.

Şaşırtıcı bir şekilde, bu fikir pratikte oldukça ilginç görünüyor. Son on yılda, Gordon Plotkin ve John Power , etki teorilerinin cebirsel anlambilimini alma fikrini savundular : fikir, ilgilendiğiniz yan etki işlemlerini ve onlardan tatmin etmelerini beklediğiniz denklemleri belirtmeniz ve ardından bu teori üzerinde özgür monad alarak genel anlamda bir anlambilim elde edebilirsiniz.

Matija Pretnar ve Andrej Bauer bu matematiksel yaklaşımı benimsediler ve daha sonra "efekt işleyicileri" olarak adlandırılan yeni bir dil kurgusu icat etmek için Eff dilinde uyguladılar : bir dizi zorunlu özellik kullanan kod yazabilir ve sonra zorunlu özelliklere bir anlambilim verebilirsiniz her etkili operasyonun nasıl uygulanacağını söyleyen bir dizi işleyici yazarak.


Ancak tanım şuysa: " Şema ve çağrı / cc'yi kullanarak herhangi bir kontrol akışı yapısı uygulayabilir misiniz? " (Öykünmesiz), o zaman cevap evet olmalı mı? LtU tartışmasına bakıldığında lambda-the-ultimate.org/node/966 , Oleg Kiselyouv'un Scheme'deki dört F-operatörünün tamamını call / cc ile uyguladığı anlaşılıyor : okmij.org/ftp/continuations/… - excerpt "Kod dayanıyor" / cc'yi istenmeyen süreklilikleri yakalamak için çağırır ve bir küresel değişken hücre kullanır. Bu, diğer F operatörlerini [...] uygulamak için yeterlidir ". ... "-F- ila + F + F".
csl

Cevabınız için bir çerçeve olarak Felleisen'in "makro-ifade edilebilirliği" ni kullandığınızı kabul ediyorum, ancak gördüğünüz gibi sorumu özellikle "/ şemada call / cc kullanarak uygulamak" şeklinde değiştirmiştim. Ve Oleg Kiselyov dört F operatörünü sınırlandırılmış süreler için uygulamak için küresel bir değişken hücre tanıtmak zorunda olsa da, bunun elbette "programın büyük, küresel bir yeniden yapılandırılması" anlamına geldiğini sanmıyorum.
csl

Bu cevabı kabul edeceğim. Ayrıca ekmi işaretçileri olan okmij.org/ftp/continuations/undelimited.html#delim-vs-undelim adresindeki metne de işaret etmek istiyorum . Ayrıca birinci sınıf, görünüyor ayrılmış kaydırma / sıfırlama benzeri uzantılar olabilir herhangi bir kontrol akış yapısını uygulamak için kullanılabilir. Bağlantıdan: "Birinci sınıf sınırlandırılmış süreklilikler, istisnalar ve değişebilir durum da dahil olmak üzere herhangi bir açıklanabilir hesaplama etkisini ifade edebilir."
csl
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.