Forum: Ders Arası RSS
Lambda Calculus Denemeleri
Jeremi'den Chris hocaya, oradan Calculus dünyasına...:)
Avatar
Salih Dinçer #1
Üye Ock 2012 tarihinden beri · 1912 mesaj · Konum: İstanbul
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Konu adı: Lambda Calculus Denemeleri
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 İstanbul toplantısında verdiği yaklaşık 1 saatlik sunumu buna etkili oldu; tavsiye ederim...

[Resim: 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) mucidinden. Deneme kodlarını paylaşmalıyım:
/*
 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...
Bilgi paylaştıkça bir bakmışız; kar topu olmuş ve çığ gibi üzerimize geliyor...:)
acehreli (Moderatör) #2
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
İ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
Avatar
Salih Dinçer #3
Üye Ock 2012 tarihinden beri · 1912 mesaj · Konum: İstanbul
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
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...

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...
Bilgi paylaştıkça bir bakmışız; kar topu olmuş ve çığ gibi üzerimize geliyor...:)
Doğrulama Kodu: VeriCode Lütfen resimde gördüğünüz doğrulama kodunu girin:
İfadeler: :-) ;-) :-D :-p :blush: :cool: :rolleyes: :huh: :-/ <_< :-( :'( :#: :scared: 8-( :nuts: :-O
Özel Karakterler:
Forum: Ders Arası RSS
Bağlı değilsiniz. · Şifremi unuttum · ÜYELİK
This board is powered by the Unclassified NewsBoard software, 20100516-dev, © 2003-10 by Yves Goergen
Şu an: 2017-11-21, 15:22:26 (UTC -08:00)