Kitaplar / Yöntem ile Programlamaya Giriş / Bölüm 8 — Fonksiyonlar değer olarak: lambda ve boru işleci
Bölüm 8 — Fonksiyonlar değer olarak: lambda ve boru işleci
Yöntem’de fonksiyonlar sıradan değerlerdir: bir değişkene konabilir, başka bir fonksiyona verilebilir. Bu özellik veri işlemede, özellikle yapay zekâ programlarında çok kullanılır.
Yöntem
program Fonksiyonel
değişken
sayılar, kareler, çiftler: liste
genelToplam: tamsayı
kişiler: liste
kare: herhangi
fonksiyon Sayaç: herhangi
değişken
n: tamsayı
başla
n := 0
dön fonksiyon başla n := n + 1; sonuç := n; bitir
bitir
değişken s: herhangi
başla
sayılar := [1..10]
kare := fonksiyon(x) => x * x // isimsiz fonksiyon (lambda)
yaz('kare(7) = ' + Çağır(kare, 7), 1)
kareler := Eşle(sayılar, kare)
çiftler := Süz(sayılar, fonksiyon(x) => x mod 2 = 0)
genelToplam := İndirge(sayılar, fonksiyon(a, b) => a + b)
yaz('Kareler : ' + kareler, 1)
yaz('Çiftler : ' + çiftler, 1)
yaz('Toplam : ' + genelToplam, 1)
// boru işleci: soldaki değer, sağdaki fonksiyonun ilk argümanı olur
yaz('Boru : ' + (sayılar |> Süz(fonksiyon(x) => x > 5) |> Eşle(kare) |> Toplam), 1)
kişiler := [['ad': 'Can', 'yaş': 31], ['ad': 'Ada', 'yaş': 24], ['ad': 'Ege', 'yaş': 28]]
yaz('Yaşa göre: ' + Eşle(Sırala(kişiler, fonksiyon(k) => k['yaş']), fonksiyon(k) => k['ad']), 1)
s := Sayaç // kapanış: n değişkenini hatırlar
Çağır(s); Çağır(s)
yaz('Sayaç : ' + Çağır(s), 1)
bitir.Çıktı
kare(7) = 49
Kareler : [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
Çiftler : [2, 4, 6, 8, 10]
Toplam : 55
Boru : 330
Yaşa göre: ['Ada', 'Ege', 'Can']
Sayaç : 3| Araç | Ne yapar? |
|---|---|
fonksiyon(x) => ifade |
Tek ifadelik isimsiz fonksiyon |
fonksiyon(x) başla … bitir |
Gövdeli isimsiz fonksiyon |
Eşle(L, f) |
Her elemana f uygular, yeni liste döndürür |
Süz(L, f) |
f doğru döndüren elemanları tutar |
İndirge(L, f) |
Elemanları ikili ikili birleştirerek tek değere indirir |
Sırala(L, anahtar) |
Anahtar fonksiyonunun sonucuna göre sıralar |
x \|> f(y) |
f(x, y) ile aynıdır; işlem zincirleri soldan sağa okunur |
Çağır(f, ...) |
Değişkende duran bir fonksiyonu çağırır |
@Ad |
Adı verilen fonksiyonu çağırmadan değer olarak alır |
Kapanış (closure): Sayaç içinde üretilen lambda, n yerel değişkenini “hatırlar”. Her çağrıda aynı n artar.
Dikkat: Bu örnekte değişkene toplam yerine genelToplam dedik. Yöntem büyük/küçük harf ayırmadığı için toplam adı yerleşik Toplam fonksiyonunu gölgelerdi; boru zincirindeki |> Toplam çalışmazdı. Bu nedenle değişkenlere yerleşik işlevlerin adlarını vermemek gerekir.
Alıştırmalar
- Bir metindeki ünlü harfleri (a, e, ı, i, o, ö, u, ü) sayan
ÜnlüSayısı(s: metin): tamsayıfonksiyonunu yazınız. - Fibonacci sayılarının ilk 15’ini bir listede toplayınız; sonra boru işleciyle yalnızca çiftleri süzüp toplamını yazdırınız.
- Öğrenci adlarını ve notlarını bir sözlükte tutunuz; notu 70’in üzerinde olanları alfabetik sırayla yazdırınız.