Hocam mesela biz geçen dönem concepts of programming languages dersinde scheme, ml, haskell vs öğrendik de piyasada nerde kullanılacak mesela, insanın aklında kalması çok zor spesifik olarak üzerinde çalışacaksın ki akılda kalsın. Ben şimdiden unuttum ha bakar hatırlarız o ayrı.
Concepts of programming languages dersinde Scheme öğrendik fakat unuttum, bakarsam hatırlarım dedin ya, şu soruyu Scheme ile çözebilir misin:
Soru:
(2020 3400 5500) gibi liste halinde maaşlar verilecek ve (1.25 1.1 1.0) gibi her bir maaş için artış oranları yine liste olarak verilecek ve istege bağlı bir para birimi verilecek örneğin "TL", "Lira" gibi girilecek. yeni maaşları hesaplayıp eski maaşla şu formatta listeleyecek bir fonksiyon yazınız:
Programdaki comment ve boş satırları çeksek dahi 29 satır ayrıca hatalı ve eksiklerle dolu örneğin TL'yi hardcoded basıyor, fakat onu kullanıcıdan almalı. Kullanıcı belki u.arası para transferinde kullanılan TRY birimini kullanmak isteyecek.
Değişken ismi olarak l l1 l2 yerine list list1 list2 olmalı veya hadi li li2 li2 olsun.
len fonksiyonu külliyen yanlış. 'length' değişkeni tanımlanamaz cunku o Scheme de ön tanımlı bi fonksiyon örneğin (length '(a b c)) ; -> 3 döndürür.
len fonksiyonundaki (cdr list) '() ye eşitse değişken tanımlamak gereksiz. fonksiyonun altında (len 0 hebele) ile hebele nin uzunluğunu sıfırlamak da poor programming practice (tam türkçesi yok)
retn fonksiyonunu tanımlamak da gereksiz cunku Scheme'de o iş 'list-ref' fonksiyonuyla yapılıyor örneğin (list-ref l n) , l'deki n. indexteki elemana ulaşır (n 0 tabanlı)
printleyici fonksiyonu sonuçta list1 ve list2 deki karşılıklı degerleri çarparak basacak, bunu 'and' koşulu altında rekürsif şekilde yapmaya calışınca alttaki parantezleri son satıra alsak bile 12 satır uzunluğunda tam bir felaket. Scheme'in rekürsif özelliğini kullanmak istiyorsan programın genelinde kullanman daha iyi olur, şunun gibi:
Bu programı (hesapla hebele hubele "TL") şeklinde çalıştırırsan çalışır. format içindeki ~f0 ifadesini sadece Cisco'nun Scheme yorumlayıcısı tanır. MIT Scheme veya başka bir yorumlayıcı kullanıyorsan onu ~a ile değiştir.
Rekürsif 6 satır süren bu programı iterasyon ile yazmak sadece 3 satır:
(define (hesapla maas artis birim) (do ((x 0 (+ x 1))) ((equal? x (length maas)) 'ok) (format #t "Maaş:~a Yeni:~a~a~n" (list-ref maas x) (* (list-ref maas x) (list-ref artis x)) birim)))
+ bile fonksiyon olabiliyor cunku Scheme'de + C veya Python'daki gibi toplama operatörü olarak tanımlı değil. Kodda iterasyonu gerçekleştiren 'do' ise fonksiyon gibi görünmekle birlikte, fonksiyon değil. Scheme'de yeni syntax tanımlamayı sağlayan 'define-syntax' ile tanımlanmış bir makro :) Makro derken C'deki makrolar gibi sadece değişkenleri yerine koyan basit birşey değil, gerçekten dilin bir parçası gibi çalışan makro. do makrosu örneğin orada dilin bir parçası gibi çalışıyor.
Scheme'deki bu yapıyı bir kez öğrenince program yazmak cok kolaylaştığı gibi kısa ve öz programlar ortaya cıkıyor.
Hocam sıfırdan web tasarımına başlamak için ne öğrenmek lazım bazı kişiler direk başlangıç olarak html5 öğrenmemi söylüyorlar daha önce yazılıma dair bildiğim hiç birşey yok nasıl başlarım bir yol haritası arıyorum.
Soru:
(2020 3400 5500) gibi liste halinde maaşlar verilecek ve (1.25 1.1 1.0) gibi her bir maaş için artış oranları yine liste olarak verilecek ve istege bağlı bir para birimi verilecek örneğin "TL", "Lira" gibi girilecek. yeni maaşları hesaplayıp eski maaşla şu formatta listeleyecek bir fonksiyon yazınız:
Maaş:2020, Yeni: 2525.00TL
Maaş:3400, Yeni: 3740.00TL
Maaş:5500, Yeni: 5500.00TL
Bu mesaja 2 cevap geldi. Cevapları Gizle