Thread overview
Lambda Calculus Denemeleri
Apr 01, 2012
Salih Dinçer
Apr 01, 2012
Salih Dinçer
April 01, 2012

Merhaba,

Jeremi sayesinde D'de iç içe işlev yazılabildiğini öğrendim ve biraz λ-calculus çalışayım istedim. Biraz da Chris hocanın, Bilgi Üniversitesi Mahkeme Salonu'ndaki ACM (http://www.acm.org/) İstanbul toplantısında verdiği yaklaşık 1 saatlik sunumu (http://video.cs.bilgi.edu.tr/watch/ACM_Istanbul_1) buna etkili oldu; tavsiye ederim...

http://img805.imageshack.us/img805/4481/chrisstephenson.png

Hoca güzel şeylerden bahsediyor; özellikle hemen şu aşağıdaki, Kleene Yıldızı ya da asterix işaretinin (-bknz. Stephen Cole Kleene (http://en.wikipedia.org/wiki/Stephen_Cole_Kleene)) mucidinden. Deneme kodlarını paylaşmalıyım:
Alıntı:

>
> /*
>  l_calculus.d (01.04.2012)
> */
> import std.stdio;
>
> int l(int a) {
> 	return a;
> }
> bool i(bool b) {
> 	writeln("b was ", b);
> 	bool tersle(bool t) {
> 		writeln ("t is ", t);
> 		return t ? false : true;
> 	}
> 	return b ? tersle(false) : tersle(true);
> }
> int f(int n) {
> 	int a = 1;
> 	while (n != 0) a *= n--;
> 	return a;
> //SCHEME (define (f n)(define (iter n a)(if (zero? n)a(iter(- n 1)(* n a))))(iter n 1))
> }
> void main() {
> 	int a = 3;
> 	bool b = true;
>
> 	writeln(l(a), " is ", i(b));
> 	writeln(l(a), "! = ", f(a));
> }
> ```

**Çıktısı:**
'b was true
t is false
3 is true
3! = 6'

Bu sadece basit bir başlangıç ve meraklıları olursa birlikte devam ettiririz.

Başarılar...

-- 
[ Bu gönderi, <http://ddili.org/forum>'dan dönüştürülmüştür. ]
April 01, 2012

Merhaba Ali Hocam ve herkese iyi haftalar...

Bende λ-calculus'ü yeni öğreniyorum ve yanlış bir bilgi verebilirim!

Ancak zor olmadığını söyleyebilirim; hatta kolaylaştırma amacı taşıdığını...

Ama tarihi kısmı gerçekten çok karışık ve iç içe girmiş. Kim neyi bulmuş, kim kimden kuram üretmiş ve/veya nasıl aynı payda da (Turing Machine) buluşmuşlar, ilk kim bahsetmiş veya biri diğerinden araklamış, off gerçekten tarihi çok karışık...:)

Ancak dediğim gibi kendisi çok basit ama iddiası büyük: her şeyi boş küme (function) olarak ifade edilebileceğini söylüyor; ama her şeyi! İşte o da şu işlev: (λ x x) veya (λ a a) hatta şöyle de ifade edebiliriz:

(tanımla a''dan -> a'ya): Yani a değerine gelen değeri a'ya olduğu gibi gönder. Çok basit değil mi?

İşte bu olmazsa olmaz bir kaide (işlev veya boş küme) sayesinde programlama dilleri doğmuş. Yani tarihin en eski dili ve basitten karmaşık işlevlere (combinators: I, K, S) giden bir macera. Hatta her algoritmayı yanlış hatırlamıyorsam sadece K ve S ile ifade edebileceğini iddia ediyor...

Alıntı:

>

I returns its argument: (I x) -> x

K throws away its 2nd argument and returns the first: (K x y) -> x

S is a sort of generic substitution operator: (S x y z) -> (x z (y z))
Bizim tanıdığımız temel dillere (Haskel, Lisp, Scheme vb.) gelince. Sonuçta bu ders bütün dillerin temeli ama C, Java gibi bazı diller λ-calculus'ün tehlikeli bazı noktalarını (dynamic scope gibi) engellemişler; hata olmaması için. Hatta Scala'da basit döngü kavramından kullanıcıları uzaklaştırmaya başlamışlar. Her şey for() içinde gerçekleştirilebiliyor ve eş zamanlı veya iç içe (nested loops) olabiliyor.

Neyse konudan konuya (eski tarihten, yakın günümüze) dallanmaya başladım. Çok geniş bir perspektif çizmiş olabilirim. Dediğim gibi ben de yeni öğreniyorum, yavaş yavaş...:)

Sevgiler, saygılar...

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

April 01, 2012

İlginç ama lambda calculus'un içinde işlev döndüren işlev kavramı da var mı? Hatta olması şart değil mi? İsimsiz işlevlerle ilgili bir kavram değil mi?

O zaman bence iç içe işlevler değil, işlev döndüren işlevlerden yararlanmak mı gerekir?

Tam bilmediğim için soruyorum ama bildiğim kadarıyla Python'daki lambda'lar da isimsiz işlevler.

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]