Unlambda - Unlambda

Unlambda
paradigma Yaklaşık olarak saf fonksiyonel
Tarafından dizayn edilmiştir David Madore
Geliştirici David Madore
İlk göründü 28 Haziran 1999 ; 19 yıl önce ( 1999/06/28 )
Kararlı sürüm
2.0.0 / 20 Aralık 1999 ; 18 yıl önce ( 1999/12/20 )
Yazma disiplin Untyped
Uygulama dili Şema , C , Java
Lisans GPL 2.0 veya üstü
Web sitesi www .madore .org / ~ david / programlar / unlambda

Unlambda minimal, "neredeyse bir saf " fonksiyonel programlama dili David Madore tarafından icat etti. Bu dayanmaktadır kombinatoriyel mantık , bir sürümüne Lambda calculus lambda operatörü atlar. Temelde iki yerleşik işlevleri (güvenir sve k) ve uygulamak operatörü (yazılı `, backquote karakter). Bu tek başına olmak Turing tamamlama , ancak, aynı zamanda var olan giriş / çıkış kullanıcı, bir kısayol fonksiyonlar ve etkileşim sağlamak için (I / O) işlevleri yavaş değerlendirme fonksiyonu. Değişkenler desteklenmez.

Unlambda olan ücretsiz ve açık kaynak yazılım bir altında dağıtılan GNU Genel Kamu Lisansı (GPL) 2.0 veya üzeri.

Temel prensipler

Bir As ezoterik programlama dili , Unlambda çok saf fonksiyonel programlama bir göstergesi olarak yerine pratik kullanım içindir. Başlıca özelliği programında veri tek parametreli fonksiyonlar geleneksel operatörler ve veri türleri-tek tür olmamasıdır. Veriler yine de uygun fonksiyonlarla simüle edilebilir lambda hesabı . Çok parametre fonksiyonları yöntemiyle temsil edilebilir -işlemden .

Unlambda ilkesine dayanan soyutlama eleme , veya fonksiyonlar dahil, kaydedilen tüm değişkenler ortadan kaldırılması. Tamamen işlevsel bir dil olarak Unlambda fonksiyonları olan birinci sınıf nesneleri ve olan sadece bu tür nesneler.

İşte bir uygulamasıdır merhaba dünya programında Unlambda içinde:

`r```````````.H.e.l.l.o. .w.o.r.l.di

Orijinal yerleşik işlevler

Notasyonu tek bir karakter baskı, bir argüman alır ve değişmeden döndüren bir fonksiyon anlamına gelir x o çağrıldığında bir yan etki olarak. Böyle bir yan etkisi kimlik fonksiyonunun versiyonunu temsil etmektedir; o bir kukla değişken olarak burada kullanılır. Program uygular bir kukla tartışmaya BASKI fonksiyonunu dönen, ve mektup yazdırma bir yan etkisi olarak. Benzer şekilde, ilk geçerlidir için mektup yazdırarak, ve dönen ; Bu sonuç, daha sonra uygulanan bir önceki örnekte olduğu gibi. Fonksiyonu olan sözdizimsel şeker bir satır karakteri yazdırır fonksiyon için. .xi`.didiid``.l.di.l.dl.d.dir

Unlambda tarafından sağlanan diğer önemli özellikleri şunlardır kve sişlevleri. kSabit fonksiyonları üretir: sonucu , çağrıldığında, döner bir fonksiyondur x . Böylece değeri olan X herhangi x ve y . `kx``kxy

sgenelleştirilmiş değerlendirme operatörüdür. olarak değerlendirilen herhangi x , y ve z . Bu dikkate değer bir gerçektir ve tarif edildiği gibi, herhangi bir hesaplama gerçekleştirmek için yeterli olan SKI combinator hesabı . Kısa bir örnek olarak, kimlik fonksiyonu olarak uygulanabilir , çünkü verim x tüm x . ```sxyz``xz`yzski``skk```skkx

Unlambda en bir akış kontrol yapısı olan mevcut devam ile çağrı gösterilen, c. Formun bir ekspresyon zaman değerlendirilir, özel bir devamıdır nesnenin o andaki yorumlayıcı durumunu temsil eden, imal edilir. Daha sonra x değerlendirilir ve daha sonra sonuç, bağımsız değişken olarak devam nesne verilir. Devam bir argüman uygulanan hiçbir zaman ise, değeri ifade değeri ile aynıdır , x . Devam nesnesi bir değer uygulanır Ancak y , yürütme x hemen iptal edilir ve tüm değer ifadesi olan Y . `cx`cx`cx

Unlambda yürütme semantik normalde istekli değerlendirme , ancak yavaş değerlendirme seçeneği kullanımı ile gösterilen, mevcut doperatör. Genellikle, formun bir ekspresyonunu değerlendirmek için ilk değerlendirir unlambda, x , daha sonra y ve daha sonra geçerli x için y . Bununla birlikte, X , özel bir değer olarak değerlendirilir , o y olan değil değerlendirildi; bunun yerine, ifadesinin değeri , bir argüman uygulandığında özel bir "gecikmeli hesaplama" ve, bitkilerde, z , değerlendirir y onun değerini görürse, ve z . Yan etkilerin olmaması durumunda, tam olarak aynıdır . Fark, yani herhangi bir yan etki uygular y ise, hemen sonuç başka değişken uygulanır kadar yan etkileri ertelemektedir. `xyd`dy`iy`iy`dy

Unlambda sonraki yerleşik operatörüdür vonun argüman ve getiri görmezden hangi v. Bu özellik beri, kesinlikle gerekli olmadığı vhalinde uygulanması mümkündür ``s`k``s``s`kskk`k``s``s`kskk, ancak bir kolaylık olarak sağlanır. (Bu ifade, yukarıda basitçe `Ykburada, Ydoymuş, sabit bir nokta bağdaştırıcının .)

Sürüm 2 yerleşik işlevleri

Daha gömmeler Unlambda sürümü 2'de kullanılmaya başlanan Girdi operatörleri tarafından kolaylaştırılır @ve . Tüm bir fonksiyonu uygulanmaktadır x , bir karakter girişi okunur, ve "geçerli yapısı" olarak saklanır; Daha sonra x uygulanır . Artık karakter girişi mevcut olsaydı Ancak, mevcut karakter tanımsız bırakılır ve x uygulanır yerine. Bir işlev zaman bir işlev uygulanan x , sonuç değerlendirilmesi ise cari karakter ise u aksi takdirde değerlendirilir. ?u@iv?u`xi`xv

Bir "yeni baskı" operatörü de bulunmaktadır |. Ne zaman değerlendirilir, fonksiyon x uygulanırsa eğer u , geçerli karakter veya hiçbir geçerli karakter varsa. `|x.uv

Son olarak, bir çıkış operatörü vardır e. Tüm euygulanır x , program yürütme sonlandırılır ve X programı (şu anda var olan sözlü çoğu zaten sonucu gözardı) sonucu olarak kabul edilir.

Ayrıca bakınız

Referanslar

Dış bağlantılar