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 |
Kararlı sürüm | 2.0.0 / 20 Aralık 1999
|
Yazma disiplin | Untyped |
Uygulama dili | Şema , C , Java |
Lisans | GPL 2.0 veya üstü |
Web sitesi | www |
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 s
ve 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.
içindekiler
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.
.x
i
`.di
d
i
i
d
``.l.di
.l
.d
l
.d
.d
i
r
Unlambda tarafından sağlanan diğer önemli özellikleri şunlardır k
ve s
işlevleri. k
Sabit fonksiyonları üretir: sonucu , çağrıldığında, döner bir fonksiyondur x . Böylece değeri olan X herhangi x ve y .
`kx
``kxy
s
genelleş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`yz
s
k
i
``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 d
operatö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.
`xy
d
`dy
`iy
`iy
`dy
Unlambda sonraki yerleşik operatörüdür v
onun argüman ve getiri görmezden hangi v
. Bu özellik beri, kesinlikle gerekli olmadığı v
halinde 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 `Yk
burada, Y
doymuş, 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
@
i
v
?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
.u
v
Son olarak, bir çıkış operatörü vardır e
. Tüm e
uygulanı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
- Felix-Hernandez (2002 Nisan 1) Campos, 28 Ders: fonksiyonel programlama Daha , University of North Carolina COMP144 arasında
- 原悠(Yutaka Hara) (2008). Yakutで作る奇妙なプログラミング言語(Japonca). Tōkyō: Mainichikomyunikēshonzu. s. 205-214. ISBN 4-8399-2784-7 .