Racket (Lisp) Döngüler

Her ne kadar Lisp gibi işlev odaklı programlama dillerinde döngüler kısıtlı ve tercih edilmeyen bir yapı olsa da Racket ile basit bir şekilde for döngülerini oluşturabiliriz.

Listeyi Gezme

Diğer dillerden biliyor olabileceğimiz foreach yapısını yani listeyi döngü ile gezme işlemini Lisp’de for döngüsü ile gerçekleştirebiliriz.

Bu sözdiziminde 3 elemanlı bir listedeki elemanları sırayla i değişkenine aktarıyoruz ve i değişkenini ekrana yazdırıyoruz. Böylece listedeki elemanları ekranda görüntüleyebiliyoruz.

(for ([i (list 1 2 3)])
    (print i))

; Output: 1 2 3
Metinsel İfadeleri Gezme

Nasıl bir listedeki elemanları tek tek for ile gezebiliyorsak, bir karakter dizisindeki her bir karakteri de tek tek gezebiliyoruz. Fakat bunu yapmak için “in-string” isminde yardımcı bir fonksiyona ihtiyaç duyuyoruz. Aşağıdaki kod örneğinde “Hello World” ifadesindeki karakterlerin döngü ile gezilme işlemini görüyoruz.

(define text "Hello World")

(for ([i (in-string text)])
    (print i))

; Output: #\H#\e#\l#\l#\o#\space#\W#\o#\r#\l#\d
Sayıları gezme

For döngüsünü listeleri ve metinsel ifadeleri gezmek için kullanabileceğimiz gibi, asıl bildiğimiz şekliyle de kullanabiliriz. Yani bir başlangıç değeri, bir bitiş değeri(dahil değil) ve artış veya azalış miktarı belirterek döngüyü istediğimiz kadar çalıştırabiliyoruz. Bunu yapabilmek için ise “in-range” isminde yardımcı bir fonksiyona ihtiyaç duyuyoruz. Aşağıdaki örnekte; 2’den başlayıp ikişer ikişer artarak 10’a kadar devam edecek bir döngü oluşturulduğunu görüyoruz. Bu döngü toplamda 4 defa çalışacaktır.

(for ([i (in-range 2 10 2)])
    (print i))

; Output: 2 4 6 8

Azalarak çalışacak bir döngü için ise in-range fonksiyonunun 3. parametresine aşağıdaki örnekteki gibi negatif bir değer vermemiz gerekiyor.

(for ([i (in-range 10 2 -2)])
    (print i))

; Output: 10 8 6 4

Yorum Yaz

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir