Tüm kodlar bir dizi Harita / Filtre / Azaltma işlemi olarak temsil edilebilir mi?


16

Son zamanlarda büyük kod parçalarını yeniden düzenleme ve bunları Linq sorguları ile değiştirme.

Dil yanlılığının kaldırılması - Linq aslında bir dizi veri üzerinde çalışan bir Harita / Filtre ve Küçült işlemidir.

Bu beni teorik olarak ne kadar ileriye götürebilirim diye düşündürdü. Tüm kod tabanını Harita / Filtre ve Azaltma işlemlerinin bir serisine (hatta tek bir) yeniden yazabilir miyim.

Ne yazık ki yararlı şeyler yapmak için para alırım, bu yüzden daha fazla deney yapamadım, ama böyle yeniden yapılandırılamadı herhangi bir kod yapısı düşünemiyorum. Yandan etkilenen kodlar monadlar aracılığıyla ele alınabilir. Çıktı bile bellek adreslerini ekran adresleriyle eşleştirmektir.

Linq sorgusu olarak (teorik olarak) yeniden yazılamayacak bir şey var mı?



Her zaman "azaltma" nın Turing tamamlanmasını garanti etmek için yeterli olduğunu düşündüm (harita ve filtre azaltma işlemleri olarak uygulanabilir, hayır?) - en azından azaltmanın işlevsel dil eşdeğeri. Buradaki uygulamanın işlevsel olanı ne kadar yakından takip ettiğinden emin olmak için Linq hakkında yeterince bilgim yok.
blueberryfields

1
Bilmiyorum, ama zor bir kural, herkesin tüm kodlarını yazmayı düşüneceği her şeyin Turing tamamlandığı ortaya çıkacak olmasıdır. Ama bunun sonucu Turing'in tamamlanması çok heyecan verici değil.
psr

1
Ben psr katılıyorum; Bu soruya geçerli bir cevabın Turing tamlığına hitap etmesi gerektiğini düşünüyorum. Bir kanıt Turing makinesini yalnızca bu işlemleri kullanarak uygulamaya çalışabilir.
Rob

Boşta düşünce: Böyle saçmalıklara izin versek bile my_list.map(_ignored => a copy of my_list), böyle bir programın alan kullanımı bazı polinomlarla sınırlı görünmektedir (program uzunluğuna bağlı olarak). O zaman böyle bir dil kesinlikle PSPACE'de olmayan problemleri hesaplayamadı. Bununla birlikte, PSPACE'deki birçok sorun çekilemez olarak kabul edildiğinden, daha büyük sınıflardan hiçbir şey söylemek için, bu çok ciddi bir kısıtlama olmayabilir.

Yanıtlar:


1

Buna işlevsel programlama denir ve birçokları tarafından temel bir kavram olarak kabul edilir. İşte Joel On Software için iyi bir giriş . Daha teknik cevap hayır, şu anda SKI hesabı ile cevaplanamayan bilgisayar soruları (iyi tanımlanmış bir şekilde) sormanın bilinen bir yolu yoktur.


1
Orada çok işlevlerden daha fonksiyonel programlamaya map, filterve reduce(biz turing bütünlüğü göz ardı ve pratik FP dilleri kullanıyorsanız bu üç kez gider). Aslında, bunlar oldukça genel ve dolayısıyla genel olarak yararlı olurlar, ancak aslında fonksiyonel programlamanın çok basit uygulamalarıdır. Çıplak asgari lambda hesabı, bu işlevleri diğerlerinin arasında değil, diğerlerinin arasında tanımlayabilir.

"İşte Joel On Software üzerinde iyi bir giriş" - Fortran'ı Basic ile karıştırmayı başarıyor, bu yüzden diğer gerçeklere fazla güvenmem.
quant_dev
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.