Soru: Saat başına 12 dolar ödenen bir firmada çalışanların fazla mesailerini bir liste halinde alıp ödenecek miktarları liste olarak döndüren fonksiyonu yazınız.

Çözen : Şadi Evren ŞEKER

Çözüm fonksiyonları:

(define (wage h)

(* 12 h))

(define (hours->wages alon)

(cond

[(empty? alon) empty]

[else (cons (wage (first alon)) (hours->wages (rest alon)))]))

Çözüm çalıştırması:

(hours->wages (list 20 11 2 34 6 4))

Açıklama:

Çözüm iki fonksiyondan ibarettir. İlki olan wage fonksiyonunda bir h parametresi alınmakta ve 12 misli döndürülmektedir. Bu basitçe bir değeri 12 ile çarpmakta ve dolayısıyla bir sonraki fonksiyonda kullanılacak olan saati ücrete döndürme işlemini yapmaktadır.

İkinci fonksiyonda bir liste alınmakta ve liste alon isimli değişkende (variable) tutulmaktadır.

Fonksiyon özyineli (recursive) olarak listenin üzerinden geçer. Bu sırada listenin sonuna geldiğini anlamak için empty? Fonksiyonu ile verilen parametrenin bitip bitmediğini kontrol eder.

Ayrıca her adımda listedeki ilk eleman “(first alon)” ile alınır ve (wage (first alon)) ile listedeki bu saatlik değerin maaş karşılığı hesaplanır.

Fonksiyon çalışması listedeki diğer elemanlar üzerine (rest alon) ile uygulanmakta bu sayede listeden her seferinde bir eleman alınmakta, listede eleman kalmayana kadar devam etmekte nihayet liste boş olunca sonuç listesi döndürülmektedir.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir