SORU
13 Aralık 2010, PAZARTESİ


Sembolik programlama nedir?*:

Stephen Wolfram büyük bir hayranı değilim, ama kesinlikle kendi boynuz tooting değil utangaç. Birçok kaynaklarda farklı sembolik bir programlama paradigması olarak Sturm diye övdüğü. * Bir kullanıcı değilim, bu yüzden benim soru bu sembolik programlama nedir ve nasıl Haskell gibi fonksiyonel diller farkı nedir?

CEVAP
14 Aralık 2010, Salı


İfade", LİSP, ve (evet) Giriş hemen akla sıçrama İncelenmiştir." sembolik programlama duyunca Hangi ifadeler program metin göstermek için kullanılan birincil veri yapısı olması gibi sembolik bir programlama ortamı karakterize etmek isterim. Sonuç olarak, çok kolay soyut veri kolayca kod dönüştürülebilir beri tam tersi soyutlamalar üzerine inşa olur.

* Ağır bu yeteneği patlatır. LİSP ve Prolog daha ağır (IMHO).

Sembolik programlama örnek olarak, aşağıdaki olaylar dizisi göz önünde bulundurun. Bu gibi görünen bir CSV dosyası var:

r,1,2
g,3,4

Dosyasını okudum:

Import["somefile.csv"]
--> {{r,1,2},{g,3,4}}

Sonuç veri veya kod? Her ikisi de. Dosya okuma sonucu ortaya çıkan veriler de bu veri üretilecek ifadesi oluyor. Kod gider gibi, ancak, bu ifade değerlendirme sonucu sadece kendisi olduğu için hareketsizdir.

Şimdi sonuç için bir dönüşüm uyguluyorum:

% /. {c_, x_, y_} :> {c, Disk[{x, y}]}
--> {{r,Disk[{1,2}]},{g,Disk[{3,4}]}}

Ayrıntılar üzerinde konut olmadan, bütün bu olanlardan Disk[{...}] her giriş satırından son iki sayı sarılı olmasıdır. Sonuç hala veri/kod ama hala hareketsizdir. Başka bir dönüştürme:

% /. {"r" -> Red, "g" -> Green}
--> {{Red,Disk[{1,2}]},{Green,Disk[{3,4}]}}

Evet, hala etkisiz. Ancak, olağanüstü bir tesadüf eseri bu son sonuç sadece yerleşik etki alanına özel dil grafikler için bulunan Sturm geçerli direktiflerin bir liste olur. Son bir dönüşüm, bazı şeyler olmaya başlar:

% /. x_ :> Graphics[x]
--> Graphics[{{Red,Disk[{1,2}]},{Green,Disk[{3,4}]}}]

Aslında, bu son sonucu görmek olmaz. Sözdizimsel şeker epik bir ekran, * kırmızı ve yeşil daireler resmini göster:

alt text

Ama eğlence burada bitmiyor. Tüm bu sözdizimsel şeker altında hala sembolik bir ifade var. Başka bir dönüşüm kuralı uygulayabilirsiniz:

% /. Red -> Black

alt text

Presto! Kırmızı Daire siyah oldu.

"Sembol iterek" bu sembolik programlama karakterize. bu tür Sturm programlama büyük bir çoğunluğu bu niteliktedir.

Sembolik işlevsel vs

Ayrıntılı olarak sembolik ve fonksiyonel programlama arasındaki farklar Adres vermeyeceğim, ama bazı açıklamalar katkıda bulunacağım.

Sorusuna cevap olarak sembolik programlama görünüm olabilir: "eğer her şey sadece ifade dönüşümleri kullanarak model çıkarsam Ne olur?" Bir cevap olarak görülen fonksiyonel programlama buna karşılık: "eğer her şey sadece fonksiyonları kullanarak model çıkarsam Ne olur?" Sembolik programlama, fonksiyonel programlama kolay hızlı bir şekilde soyutlama katmanları oluşturmak için yapar. Burada verdiğim örnek, kolayca yeniden, diyelim ki, Haskell fonksiyonel reaktif animasyon bir yaklaşım kullanarak olabilir. Fonksiyonel programlama fonksiyonu kompozisyon, yüksek seviye fonksiyonlar, combinators fonksiyonları ile yapabileceğiniz tüm eseri olan bir şey hakkında.

* Açıkça sembolik programlama için hazırdır. Olası işlevsel tarzda kod yazmak, ama İncelenmiştir fonksiyonel özellikleri gerçekten sadece dönüşümler üzerinde ince bir kaplama yani " sızdıran soyutlama, aşağıda Dipnot).

Açıkça Haskell fonksiyonel bir programlama için hazırdır. Mümkün sembolik tarzda kod yazmak, ama bu kelime oyunu yapardımsözdizimselprogramlar ve veri gösterimi oldukça farklı bir deneyim etkisiz hale getiriyor.

Açıklamalar Sonuç

Sonuç olarak, fonksiyonel programlama ve Haskell husus gibi) ve sembolik programlama Sturm-husus gibi) arasında bir ayrım olduğunu savunuyorum. Eğer her iki çalışmada ise, o zaman sadece bir farklılığı nihai testi, çalışmaktan daha önemli ölçüde daha iyi öğrenirler diye düşünüyorum.


İşlevsel Soyutlama İncelenmiştir sızdıran?

Evet, sızdıran. Örneğin: bu deneyin

f[x_] := g[Function[a, x]];
g[fn_] := Module[{h}, h[a_] := fn[a]; h[0]];
f[999]

Usulüne uygun olarak bildirilen, ve, kabul, WRI. Yanıt: Function[var, body] (Function[body]) kaçının.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Matthew Pearce

    Matthew Pear

    9 AĞUSTOS 2009
  • Rhapsody

    Rhapsody

    7 ŞUBAT 2008
  • Shantanu Sood

    Shantanu Soo

    3 Kasım 2008