Programlama dilleri daha doğal dillere benziyor mu?


27

Programlama dillerini dilbilim bağlamında çalışabilir miyiz? Programlama dilleri, doğal dillere doğal yollarla benzer şekilde mi gelişiyor?

Her ne kadar tam rasyonellik ve matematiksel tutarlılık programlama dilleri için şart olsa da, bunları hala insanlar için okunaklı ve rahat kılma ihtiyacı vardır (özellikle modern diller).

Programlama dilleri daha dilsel ve dolayısıyla daha doğal hale gelmeye mi dönüşüyor? Örneğin, makine kodu, delikli kartlar ve montaj dilleri Ruby ve Python vb. Gibi daha okunabilir dillere yol açtı.

Bilgisayar dillerinin daha doğal hale geldiğini söylediğimde, 'ingilizce olan kelimeleri' daha fazla içerdiklerini kastetmiyorum, dilbilgisi karmaşıklığı ve anlam ifade etme yetenekleri bakımından daha doğal bir dil gibi görünüyorlar demek istiyorum. (örneğin, rasyonel ve insan tarafından anlaşılabilir yollarla bir veritabanından yapılan sorguyu açıkça tanımlayabilmek).

Hepiniz ne düşünüyorsunuz? Programlama dilleri daha doğal dillere benziyor ve bu nedenle Dilbilim yasalarına uygulanabilir mi?

Ya da belki diller bir tarafta yaşar, burada bir tarafta aşırı rasyonel dillere ve diğerinde daha yaratıcı olanlara sahip olursunuz. Belki de programlama ve doğal diller aynıdır ve her ikisi de bu dil yelpazesinde yatmaktadır (tek farkı, belki de anlamlarını vermeye çalıştıkları 'şey' olmalarıdır).

İnsan dilleri ile bilgisayar dilleri arasındaki (Babil Kulesi etkisi) ayrımı arasında bir bağlantı var mı? Aynı nedenlerden dolayı daha çeşitli hale geliyorlar mı (yani sürekli gelişen bilgisayar sistemleri / kültür sistemleri vb. İçindeki farklı sorunları çözmek için)?


3
kısa cevap: evet, evet onlar.

17
Kısa cevap: hayır, hayır değil.


3
Bilgisayar dilleri, son birkaç bin yıl boyunca doğal dile doğru (özellikle de farkında olduğum) evrimleşme eğilimi göstermeyen matematiksel gösterime benzeyen netlik ve kesinlik ile iyi yapma eğilimindedir. Ayrıca, bebeğinizle Haskell'de, yalnızca yaşamının ilk birkaç yılında iletişim kurduğunuzda, doğal dil akıcılığını artıracağından şüpheliyim. Bu nedenle, doğal ve bilgisayar dilleri arasında oldukça keskin bir kontrast olduğunu düşünüyorum. Muhtemelen daha geniş dil inşası tekniklerinin yayılması zamanla "doğallığı" hafifletti galiba.

@ ryanOptini: C #, JavaScript, Python veya SQL doğal dillere benziyor mu? Hepsi İngilizce dilden anahtar kelimeler kullanmasına rağmen hiçbiri doğal dil biçimine yaklaşmıyor. COBOL en yakın olabilirdi, ancak birçok insanın COBOL'ü yeşil alan projeleri için kullandığını sanmıyorum.
Jim G.

Yanıtlar:


32

Gerçekten değil, hayır. Programlama dilleri yalnızca “Biz İngilizce olan kelimelerin” anlamında (daha doğal diller gibi olmuştur sic ).

Programlama dillerinin temel özelliği, belirsiz olmalarıdır. Bir program yazıp çalıştırdığınızda, onun davranışı olan iyi tanımlanmış bir anlamı vardır. Amaçlanan şekilde çalışan bir program yazmak istiyorsanız (zor bir hedef), programın davranışının mümkün olduğunca öngörülebilir olması önemlidir. Programlama dilleri, doğal dillere olan geniş uçurumda fazla bir fark yaratmamıştır.

Bunun tersine, diğer taraftaki boşluğu kapatmaya yönelik çalışmalar yapılmıştır: doğal dilleri programlama dilleriyle aynı araçlarla analiz etmek. Bu alana doğal dil işleme denir . Bu yaklaşımlar, makine öğrenmesi lehine büyük ölçüde atıldı . Vikipedi yazısında , burada doğrudan ilgili olan bir bölümden alıntı yapacağım :

1980'lere kadar, çoğu NLP sistemi karmaşık elle yazılmış kurallar kümesine dayanıyordu. Bununla birlikte, 1980'lerin sonundan itibaren, NLP'de, dil işleme için makine öğrenme algoritmalarının tanıtılmasıyla bir devrim yaşandı. Bu, hem Moore Yasası'ndan kaynaklanan hesaplama gücündeki istikrarlı bir artıştan hem de teorik temelleri, makine-öğrenme yaklaşımını temel alan cesaret dilbilgisi türünü cesaretlendiren Chomskyan dilbilim teorilerinin (örneğin dönüşümsel dilbilgisi) baskınlığının azaltılması nedeniyle oldu. dil işleme

Programlamanın gelişmesinin bir yolu, daha büyük ve daha büyük sistemler tasarlarken, kaynak kodun her zaman onları anlamak için iyi bir yol olmamasıdır. Örneğin, bir Intel CPU, Man tarafından şimdiye kadar tasarlanan en karmaşık nesnelerden biridir ve “kaynak kodu” yalnızca bir metin dosyası koleksiyonundan ibaret değildir. Ancak tam tasarım, bir insan diline benzeyen hiçbir şeye doğru gelişmiyor. Burada uygun bilişsel araçların veya metaforların ne olduğunu bilmiyorum ve henüz kimsenin bilmediğini sanmıyorum; birkaç yüzyılda tekrar sor.

¹ Veya daha doğrusu, ortaya çıktıkları koşullara açıklamalı olası davranışlar kümesidir, ancak bu, modellemede yalnızca bir dolaylı adım atılmasıdır, bu yüzden bu burada gerçekten geçerli değildir.


Programlama dillerine benzeyen "doğal" dilleri yapma girişimlerinin çok başarılı olmadığı belirtilmelidir. En gelişmiş örnek olarak Lojban'ı görün .
Dougal

CPU mimarisi ve programlama arasındaki karşılaştırma biraz belirsizdir, donanım tasarımı, örneğin 2d yerleştirme ve yönlendirme problemlerini çözmek için tamamen farklı problemlere sahip olduğundan, her zaman büyük ölçüde metin tabanlı değildir. (herhangi bir donanım tasarımı HDL'lerle daha fazla metin tabanlı tasarıma doğru ilerliyorsa)
jk.

2

Bilgisayar dilleri, son birkaç bin yıl boyunca doğal dile doğru (özellikle de farkında olduğum) evrimleşme eğilimi göstermeyen matematiksel gösterime benzeyen netlik ve kesinlik ile iyi yapma eğilimindedir.

Ayrıca, bebeğinizle Haskell'de, yalnızca yaşamının ilk birkaç yılında iletişim kurduğunuzda, doğal dil akıcılığını artıracağından şüpheliyim. Bu nedenle, doğal ve bilgisayar dilleri arasında oldukça keskin bir kontrast olduğunu düşünüyorum.

Belki de dil yapım tekniklerinin daha geniş yayılımı zamanla biraz "doğallığı" geliştirmiştir, sanırım programcılar kendileri için daha kolay görünen dilleri kullanarak "orada ayaklarıyla oy kullandılar" ve dil yaratabilen insan sayısı daha da arttı pratisyenler ve daha iyi araçlar, ancak bu kenarlarda küçük bir etkidir ve programlama dillerinin insanlara temel bir dönüşümünü temsil etmez.


2

Bu alanda ilginç bir vaka çalışması Perl ve Ruby (ve Python ) ' dır . Perl, 90'lı yılların başında geliştirilen ve önceki Unix tabanlı kodlama dillerine (örneğin bash) kıyasla çok fazla yetenek ekleyen bir betik dilidir. yazar Larry Wall , dilbilimdeki geçmişinin bazı dil özelliklerine ilham kaynağı olduğunu söyleyerek kayıtlarda bulunuyor.

Bununla birlikte, Perl'in tuhaf sözdizimi ve çeşitli eleştiriler düzeylerinde ilham veren tüm ince dilbilgilerinde dili İngilizce'ye benzer kılan birçok özel durumu vardır . daha sonra bilgisayar bilimcileri tarafından geliştirilen Ruby ve Python gibi betik dilleri, sözdizimlerinde çok daha fazla tutarlılığa sahiptir. Asıl sorun, doğal dilin büyük miktarda belirsizliğe sahip olmasıdır (bu dilbilim alanında incelenmiştir.), böylece doğal dil, Siri gibi gelecekteki insan-bilgisayar arabirimlerinde önemli bir yere sahip olacak, ancak bu arabirimler doğal olarak belirsizlik sorunlarına maruz kalacaktır.

öyleyse, burada bilgisayar dillerinin gelişiminin doğal bir dil fikrinden uzaklaştığı bir durum söz konusudur . dahası, bilgisayar programlama dillerinin genel tarihi, belirsizliği ortadan kaldırmak için geliştirilip değiştirilmiş olmalarıdır (ki bu, doğal dile çok doğaldır). derleyicilerin tarihinin başlarında anlaşılmadı (muhtemelen 1970'lerde söylenebilir) ve örneğin Fortran dilinin ilk sürümlerinde , derleyici uygulamasına bağlı belirsiz anlamları olan ifadeler vardı. Ayrıştırma ile ilgili bazı CS dili teorisi, kısmen dil ayrıştırmadaki belirsizliğin keşfedilmesine cevap olarak geliştirilmiştir.


Tarihlerinizi yanlış yazıyorsunuz: Perl 1987’de, 1989’da Bash’i piyasaya sürdü. Büyük harfli hataları nedeniyle postanızı okumakta sorun yaşıyor.
tchrist

1

Makine dili çok hassastır, insan tarafından yazılmış bir metin genellikle birçok farklı şekilde yorumlanabilir (örneğin, bazı şiirsel metinler).

Gittikçe daha fazla evrimleşen örüntüler eşleşiyor, örneğin çirkin bir kod yazdığınızda bir derleyici birkaç olası çözüm önermenize yardımcı olabilir ve daha sonra kendinize yetişmenize yardımcı olacak bir uyarı ya da hata verebilir. (örneğin, ortak kod kalıplarına dayanarak)

Etkileşim / tasarım kalıpları hakkında özel araştırmalar var, T9 ve SWYPE bile size çok yardımcı olan kalıp tanıyıcılar (sesinizi kaydeden ve metne dönüştüren programlar da kalıp tanıyıcılar).

Elbette bir program, kesin mekanizmalara dayanan bir şeydir, bu nedenle kesin dillere ihtiyacınız vardır (doğal değil), google'da yapılan basit bir web araması çok doğaldır, sadece birkaç kelime yazmanız gerekir ve istediğiniz şeyi elde edersiniz.

Her farklı görev ve hedefin kendine ait bir dili vardır, bu basit bir "tek dilli evrim" değildir, çok daha fazla dil vardır. Hassas görevler hassas dillere ihtiyaç duyar ve rahat görevler rahat diller gerektirir

Aynı C kodunu yazabilir ve daha sonra birkaç farklı derleyiciyle derleyebilirsiniz ve (bazı derleyiciler kodlanmadıkça) farklı derlemeler oluşturulmuş olsa bile kodun sonucu aynı olur, aynı zamanda bir web araması için farklı arama motorlarına anahtar kelimeler farklı sonuçlar verir.


1

Birkaç yıl önce büyük oğlum ve ben, aşağıdaki soruları yanıtlamak amacıyla bir Plain English programlama ve geliştirme sistemi geliştirdik:

  1. Düşük seviyeli programlar (derleyiciler gibi) yüksek seviyeli dillerde (İngilizce gibi) rahatça ve verimli bir şekilde yazılabilir mi?

  2. Doğal diller nispeten "özensiz" bir şekilde ayrıştırılabilir ve yine de verimli bir programlama için yeterince kararlı bir ortam sağlayabilir mi?

  3. Doğal dil düşüncelerinizi alternatif bir sözdizimine çevirmeniz gerekmediğinde programlamak daha mı kolay?

Şimdi bu üç soruyu doğrudan deneyimle, yankılanan bir "Evet" ile cevaplayabiliriz.

Çözümleyicimiz çalışır, insan beyni gibi bir şey olduğunu düşünüyoruz. Düşünmek. Bir baba bebek oğluna şöyle der:

"Bu şişeyi emmek ister misin küçük adam?"

Ve çocuk duyarsa

"falan, falan, SUCK, falan, falan, ŞİŞE, falan, falan."

Ama doğru cevap veriyor çünkü başının sağ tarafında, sol taraftaki "şişe" kelimesine bağlı bir şişenin "resmi" ve boynunun arkasında, boynunun arkasına yakın önceden var olan "bir beceri" var. "emmek" terimi. Başka bir deyişle, çocuk topladığı resimlerle (türler) ve becerilerle (rutinlerle) yapabileceği bir şeyle eşleşir ve gerisini dikkate almaz. Derleyicimiz aynı şeyi yapar; yeni resimler (türler) ve beceriler (rutinler) bizim tarafımızdan değil, yeni uygulama kodunu yazdığından programlayıcı tarafından tanımlanır.

Tipik bir tür tanımı şuna benzer:

Bir çokgen bazı köşeleri olan bir şeydir.

Dahili olarak, "çokgen" adı artık iki kat bağlantılı bir köşe listesi içeren bir tür dinamik olarak tahsis edilmiş yapı ile ilişkilendirilmektedir. "Vertex", benzer şekilde başka bir yerde (bu tanımdan önce veya sonra) tanımlanır; çoğul otomatik olarak anlaşılır.

Tipik bir rutin şöyle görünür:

Bir poligona bir x koordinatını ve ay koordinatını eklemek için: x ve y verilen bir köşe oluşturun. Köşeyi çokgenin köşelerine ekleyin.

Resmi isimlerin (uygun isimlerin) parametreler ve değişkenler için gerekli olmadığına dikkat edin. Bu inanıyoruz ki, büyük bir içgörü. Benim gerçek dünyadaki sandalye ve masam asla (normal konuşmada) "c" veya "myTable" olarak adlandırılmaz - onlara basitçe "sandalye" ve "masa" denir. Aynı şekilde burada: “tepe” ve “çokgen” bu tür şeylerin doğal isimleridir.

Ayrıca boşluklara rutin ve değişken "names" ("x coord" gibi) izin verildiğini unutmayın. Bu 21. yüzyıl, evet? Ve bu "takma" lere de izin verilir ("x koordinat" için "x" gibi). Ve bu sahipler ("çokgen köşeleri"), "kayıtlar" içindeki "alanlara" referans vermek için çok doğal bir şekilde kullanılırlar.

Ayrıca, "verilen" kelimesinin "özensiz ayrıştırma işlemimiz anlamak için gerekli olan resimlere (türlere) ve becerilere (rutinlere) odaklandığından ve bunları görmezden geldiğinden beri" veya "ile" veya başka bir eşdeğerde "kullandığını" unutmayın. geri kalanı mümkün olduğunca.

En düşük seviyede, işler şöyle görünür:

Başka bir numaraya numara eklemek için: Intel 8B85080000008B008B9D0C0000000103.

Bu durumda, en az ve en çok dilin - İngilizce ve makine kodunun (onaltılık da olsa) - tek bir rutinde bulunduğunu unutmayın. Buradaki içgörü, (tipik bir matematik kitabı gibi), bir programın öncelikle doğal bir dilde, uygun snippet'lerin gerektiği gibi (ve sadece gerektiği şekilde) daha uygun sözdizimleriyle yazılması gerektiğidir.

Geliştirme sistemimizi buradan alabilirsiniz: www.osmosian.com/cal-3040.zip. Küçük bir Windows programıdır ve boyutu bir megabayttan küçüktür. PDF'yi "belgeler" dizininde başlatırsanız, on sayfaya gitmeden önce tüm shebang'ı kendi içinde yeniden derleyeceksiniz (Walmart'ın satırındaki bir makinede üç saniyeden kısa bir sürede).

Sorular ve yorumlarınız gerry.rzeppa@pobox.com adresinde verilmelidir.


Girişimci.ifi.uzh.ch / site / description kontrollü ingilizceyi biliyor musunuz ? Bunun arasında oturuyormuşsun gibi görünüyorsun. Inform7 en.wikipedia.org/wiki/Inform#Example_game_2
Pete Kirkham

Fikir hoşuma gidiyor, ancak hala geçilecek bazı sözdizimi halkaları var gibi görünüyor. Örneğin, ben veya geometrik şeyleri modelleyen hiç kimsenin X ve Y koordinatlarının ayrı ayrı eklendiğini düşünmeyeceğini sanmıyorum, bu yüzden "Bir x koordinatını ve ay koordinatını eklemek için ..." bana çok garip geliyor. "X ve y verilen bir köşe oluştur" gibi. Neredeyse affedilir, çünkü aslında çoğunlukla İngilizce okur , ancak yine de çok katı görünmektedir. Belki de sadece bir insan gibi düşünmemeye alışkınım, bilmiyorum.
cHao

1

İnsan dillerinin ayrılması, izole topluluklardaki (Darwinist?) Evrimden gelir. Programlama dillerinin ayrılması, teknik gereksinimdeki, teknik ideolojideki, teknik ve teorik anlayıştaki değişikliklerden, teknik yetenek uygulamalarımızdaki değişikliklerden gelir. Bence biraz daha bilinçli bir süreç.

Bilgisayar dilleri doğal dillere daha çok benzeyebilir mi? Muhtemelen biraz, bir noktaya kadar. Sanırım, doğal dil karmaşıklığının büyük bir kısmı, eski tutarsızlıkların muhtemelen yenisinin ortaya çıkması sırasında muhtemelen kademeli olarak ortadan kalkması muhtemel olsa da, zaman içerisinde herhangi bir noktada tutarlı bir sonuç üretmek için hiçbir neden bulunmayan çeşitli eşzamanlı evrim fenomenlerinden kaynaklanmaktadır. . Ben diachronic dilbilimi konusunda uzman değilim. Fakat programlama dillerinde bu tür bir karmaşıklık istiyor muyuz?

Belirsizlik sorunu önemli bir konudur, ancak çoğu insan tarafından belirtildiği gibi değildir. Bir dil bir iletişim aracıdır ve bu iletişim bağlamında analiz edilmelidir (insan-insan, insan-makine, hem yerler arasında hem de zamanlar arasında, biraz basitçe söylemek için). Önemli olan, dilde yalnızca açıklayıcı ifadeler yapıp yapamayacağınız değil, iletişimin amaçlanan bağlamda her zaman net olmasını sağlayacak olup olmadığına bakmamaktır. Belirsiz programlar yazmaya olanak tanıyan iyi bilinen ve yaygın olarak kullanılan bir programlama dili var (peki, öyleydi, ama bir süredir en son sürümlere bakmadım). Bu durumda, derleyici belirsizliği tespit etmek ve belirsizliği ortadan kaldırmak için programa dahil edilebilecek açıklama talep etmek için yeterince akıllıdır. Belirsizlik tespitinin, olası seçimlerden sadece birinin anlamı olduğu anlamına gelmediğine dikkat edin. Sorun, iletişim kuran kurumlardan birinin belirsizliği tespit edip edemeyeceği ve gönderenin netleştirebilmesidir. İnsan bu konuda kötü, ama bilgisayarlar oldukça iyi olabilir.

Formaliteler ve programlama dilleri daha zengin ve daha esnek bir sözdizimine sahip olabilir. Yapmamalarının temel nedeninin basit muhafazakarlık olduğuna inanıyorum. Kullanılan sözdizimsel araçlar hala, otuz yıl önce veya daha fazla, o zamanın bilgisayarlarının sınırlamalarını karşılamak üzere tasarlanmış araçlardır. Ayrıştırma verimliliği artık derleme işleminde böylesine kritik bir konu değildir ve daha güçlü teknikler izlenebilir olarak mevcuttur.

İlginç bir şekilde, dillerin sözdizimini programlamak için en yaygın kullanılan temel, doğal dil araştırmasından gelir: bağlamsız gramer. Teknik araştırmaların çoğu, altmışlı yılların teorik / teknik bilgisayar bilimlerine, doğal dil halkı tarafından seksenlerin başlarında biraz keşfedilmesi için harekete geçti (basitleştiriyorum). O zamandan beri, doğal dillerde sözdizimi konusunda çok fazla ilerleme kaydedilirken, bilgisayar bilimi büyük ölçüde eski sözdizimsel araçlarla sıkışmış görünüyor. Doğal dil sarkaçı şimdi istatistiksel tekniklere doğru tekrar sallanıyor, ancak sözdizimi için cebirsel yaklaşımlar unutulmadı. Büyük olasılıkla, iyi yaklaşımlar cebirsel ve istatistiksel tekniklerin bir kombinasyonundan gelecektir.

Benim düşüncem, kritik alanın anlambilim ve sözdizimi ile anlambilim arasındaki geçiş olduğu. Programlama dilleri ve biçimsel sistemler söz konusu olduğunda birçok kesin tekniğimiz varken bu hala doğal dil için biçimlendirmek için çok zor. Oyun, doğal diller için oynanmaktan uzak olduğu için, gelecekte programlama dilleri üzerinde ne gibi bir etkisinin olabileceğini söylemek zor.

Başka bir nokta, birçok programlama dili tasarımcısının bir şeyi kanıtlamaya veya teknik bir ideolojiyi zorlamaya çalıştığıdır. Böylece, kullanıcıların amaçlanan paradigmalarından ayrılmalarını önlemek için tasarımlarında aşırı derecede kuralcıdırlar. Bu ne yazık ki yaratıcılık için son derece üretkendir. Şimdiye kadar tasarlanan en yaratıcı dil, ilkler arasındaydı: Lisp (1958). İzin verdiği özgürlük ve esneklik kayda değer yaratıcılığın kaynağıydı. Fiyat kendini disiplin ve anlayış gerektiriyordu. Ancak Lisp, dillerin yaratılması için kullanılan bir dildi.

Şimdi, başka bir perspektifi ele almak için, programlar aslında matematiksel bir ifade olarak görülen özelliklerinin kanıtıdır (peki, tekrar basitleştiriyorum). Bazı insanlar (referansları hatırlamıyorum, üzgünüm) teoremle oynuyorlardı, bir matematikçi tarafından doğal dilde yazılmış gibi görünen kanıtlar üretiyorlar. Bu yüzden sanırım doğal bir dilde yazılmış gibi görünen programlara sahip olma fikri tamamen saçma olmayabilir.

Bununla birlikte, bir matematikçi tarafından gayrı resmi bir şekilde yazılmış olsa bile, matematiksel söylemin sıradan konuşmalardan veya bir tarih kitabından oldukça farklı göründüğünü fark edebilirsiniz. Bu, söz konusu söylem evreninde, konuşulmakta olan anlamsal alanlardaki önemli bir farktan kaynaklanmaktadır. Böylece, daha çok doğal dillere benzeyen programlama dilleri düşünebilirsiniz, ancak söylemin alanı ve kendi arzulanan özellikleri olan doğal bir sınırlama vardır. Büyük olasılıkla, esasen yüzeysel, yani çoğunlukla sözdizimsel kalacaktır. Matematikçi, biçimsel sistemler ve politika hakkında konuşabilir. Umarım iki söylem benzer gözükmeyecektir. Bilgisayarlar (henüz?) Siyasetten bahsedemez veya anlayamazlar. Yaptıkları gün artık programlama olmayacak.

Tarihe bakıldığında, üst düzey diller, en baştan (FORTRAN) hesaplama görevlerini ifade etmek için daha doğal bir forma yaklaşma çabasıydı, ancak bu görevlerin matematiksel veya mantıksal olduğu anlaşıldı (Fortran 1957, Algol 1958, Lisp 1958). ) veya daha fazla iş odaklı (Cobol 1959). 10 yıl içerisinde insanlar, daha yakın olacak, eldeki soruna daha iyi adapte olacak diller konusunda endişeleniyorlardı ve extensible languagessözdiziminde hem sözdizimi hem de anlambilimi kapsayan önemli bir araştırma vardı . Sorunları daha doğal olarak ifade etmenin temel yollarından biri object orientation(bazen başka isimler altında) ortaya çıkmasıydı . Ebeveynlik atamak her zaman zor olsa da, muhtemelen yapay zeka çalışmaları, çoğunlukla Lisp ve dilden ortaya çıktı.Simula 67(Algol ailesi), bir bilgisayarda simüle edilecek daha doğal olarak gerçek dünya sorunlarını ifade etmeyi amaçladı. Her şey tarihsel olarak tutarlı görünüyor.


0

Sorulan soruların benzer olmasına benzer olsalar da, karmaşıklık açısından oldukça farklıdırlar. Temel fark, doğal dilin doğal olarak belirsiz olmasıdır (kelime düzeyinde bile). Bir kelime ile ne kastedildiği bile belli değil mi? Programlama dilleri dünyasında, ancak, çeşitli tanımlayıcı cihazlar elinizin altında. Doğal dili ayrıştırmak için dilbilgisine bakın ve programlama dillerini ayrıştırmak için olanlar, boyuttaki fark dikkat çekicidir. Mesele şu ki, programlama dilleri için gramerlerin biçimsel sistemler olduğu; bu yüzden matematiksel analiz için uygundurlar. Belirsizliklerle uğraşmak, programlama dili meslektaşındaki bir çözümün önemsiz veya basit olacağı birçok sorun ortaya çıkarır.

Belki bilgisayar bilimcileri ile "doğal" insanlar arasındaki boşluk küçülürse, doğal diller ile programlama dilleri arasındaki boşluk daralabilir.


0

Geçtiğimiz yıllarda, (E) DSL ve akıcı arayüzlere olan ilgi, pek çok dilde sürekli olarak artmıştır: Haskell, çeşitli betik dilleri, C #, Java ve hatta C ++ (aşırı yüklenmeyi düşünün) operator<<çıktı yapmak için).

Bir dereceye kadar, bunlar kodun daha doğal okumasını sağlar. Groovy bir EDSL örneği ile göstereceğim. Groovy.time paket yazma yapmanızı sağlar

use ( TimeCategory ) {
    // application on numbers:
    println 1.minute.from.now
    println 10.days.ago

    // application on dates
    def someDate = new Date()
    println someDate - 3.months 
}

Bunu java.util.Calendar sınıfı ile yapacak olsaydınız, ilk örnek için böyle bir şey yazmanız gerekirdi:

void demo() {
    Calendar date = new GregorianCalendar();
    date.add(Calendar.MINUTE, 1);
    System.out.println(date);
}

0

Bilgisayar dilleri (gün bile ilkel makine dilleri uzun geçmiş) vardır bunlar öncelikle dost insanlarla iletişim içindir, insanlar tarafından tanımlanır ve bir makineye talimatları iletmek için sadece ikincil kullanıldıkları haliyle, insan dilleri. Bu nedenle, "doğal" dillerin geliştiği aynı şekilde evrimleşiyorlar (en sevdiğiniz dil için sadece "deyimler" konusuna bakın, örneğin C'nin K&R C'den mevcut ISO-C 2011'e nasıl geliştiğini kontrol edin. Fakat farklı bir ortamda varlar. Kesin bir anlam ifade etmeli (bilgisayarlar hâlâ kendilerinden ne isteniyorsa düzeltmek ve düzeltmek için çok aptallar) ve işlem kolaylığı konusunda bir prim var (bu nedenle C ++, PL / 1 veya APL'nin gramer ve kelime bilgisi çok daha basit örneğin, doğal diller giderken oldukça basittir) İngilizce'den.

Aynı şey matematiğin formalizminin veya genel olarak bilimlerin, hatta planların (doğal olarak 2D, diğerleri gibi 1D değil) söylenebilir.

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.