Birçok posterin verdiği fikre, böyle bir dilin "işe yaramaz" olacağına değinmek istiyorum. Belki de insanların belirli bir görevi çözme niyetiyle el yazması yararsızdır. Bununla birlikte, programlama dilleri için çoğunluk kullanım durumu olmasına rağmen, kesinlikle tek kullanım durumu bu değildir. Bu dilin yararlı olduğu yerlerde birçok kullanım durumu akla geliyor ve bu dilleri bu örnekler için inceleyebiliriz.
(Yerine söz konusu programın dönüşüm: Öncelikle genetiğe Cort Ammon kinaye üzerinde nokta )
için 5
) bir olarak görülebilir mutasyon . Bu tür bir manipülasyon, evrimsel hesaplama alanında yaygındır ; Özellikle genetik algoritmalar üzerinde bu tür dönüşümleri gerçekleştirmek dizeleri ederken, genetik programlama dönüşümleri programlara . Her iki durumda da, genellikle her olasılığa anlam vermek istiyoruz, çünkü bu en kompakt arama alanını üretecektir.
Genetik algoritmalar , dizgiler için bir çeşit değerlendirme işlevine dayanır ; Değerlendirme işlevimiz olarak bir programlama dili yorumlayıcısı kullanırsak, o zaman tüm olası dizgelere anlam veren bir programlama dilinin yararlı olduğu bir senaryoya sahibiz. Genetik programlamada, değerlendirme işlevimizin bir programlama dili yorumlayıcısı olduğu varsayılmaktadır, ancak programlarımız için çeşitli gösterimler seçebiliriz ; örneğin, birçok sistem soyut sözdizimi ağaçlarında çalışır. Eğer gösterimlerimizde dizeleri seçersek, genetik algoritmalarla aynı senaryoyu kurtarabiliriz.
Her dizgenin geçerli bir program olmasını isteyebileceğimiz bir başka durum da programları sıralamaktır . Bu, CodesInChaos tarafından belirtilen itirazla ilgilidir, ancak birkaç nedenden dolayı Doğal sayılar yerine karakter dizileri üzerinde çalışmayı tercih edebiliriz:
- Dilde bir yapı varsa, örneğin. Alt dizgilere anlam atayabiliriz, bu Doğal sayıları çevirirken bu kaybolabilir. Bu durumda, tüm programı bir sayı olarak göstermek yerine, yerel olarak alt dizeleri aktarabilmek ve dönüştürmek için dizeleri kullanmayı tercih edebiliriz. Bu, her bir bitin ayrı bir anlamı olduğunda, bitsel işlemleri aritmetik ifadeler yerine int üzerinde kullanmayı tercih edebileceğimize benzer. Bu temelde evrim senaryosunun bir genellemesidir.
- Talep üzerine programlar üretmek isteyebiliriz; örneğin, tamamen belirlenmemiş bir programın çalıştırılmasına başlayabiliriz ve komut göstericisine ulaştığında / eğer tek tek komutları (örneğin karakterleri) üretebiliriz (örneğin rastgele). Bu, programın bir Turing makine bandı olduğu algoritmik bilgi teorisinde yaygındır ve amaç, rasgele oluşturulan programların davranışını karakterize etmektir. Örneğin, rasgele bir diziden önce Solomonoff'u, rastgele bir bantı olan evrensel bir Turing makinesinin bu dizgiyi çıkarması olasılığı olarak formüle edebiliriz.
Örnek diller açısından, birçok evrimsel hesaplama sistemi, Push ailesi gibi yığın dillerine dayanmaktadır . Bunlar, isteğe bağlı belirteç akışlarına izin verme eğilimindedir (bireysel karakterler olarak temsil edebiliriz). Bazen (BrainSlugs83'ün Brainfuck örneğinde olduğu gibi) parantezleri dengelemeyle ilgili kısıtlamalar vardır; Ancak biz bu ilgili olabilir kendini sınırlayan programların gibi bir dize ki, [
bir geçerli olmayabilir programı , ama bu olan geçerli bir programdır önek . Eğer stdin'den kaynak kodunu okuyan bir derleyici / tercüman hayal edersek , böyle bir dizgiyi reddetmez[
, devam etmeden önce daha fazla girdi bekler.
İkili Birleştirici Mantık ve İkili Lambda Matematik gibi diller, algoritmik bilgi teorisi üzerine doğrudan işsiz kalmıştır; dan http://tromp.github.io/cl/cl.html
Minimalist evrensel bir bilgisayarın bu tasarımı, bireysel nesnelerin rastlantısallığını inceleyen Kolmogorov Karmaşıklığı'nın somut bir tanımını ortaya koyma arzum ile motive oldu.
You are a bimbo.