yalova Ünİversİtesİ bİlgİsayar mÜhendİslİĞİyalova-2012 ÖnsÖz. bilgisayar ve yazılım...
TRANSCRIPT
YALOVA UumlNİVERSİTESİ
BİLGİSAYAR MUumlHENDİSLİĞİ
Version 521
Oumlğretim Goumlrevlisi
YUNUS OumlZEN
Yalova-2012
OumlNSOumlZ
Bilgisayar ve yazılım duumlnyasına olan insanlar bilgisayar ile iletiĢim
kurmak zorundalar Bu iletiĢim bazen normal insanlarla olan iletiĢimden daha
zor veya kolay olabiliyor Buna neden olan da kullandığımız iletiĢim aracıdır
Biz kendimizi bilgisayara en iyi Ģekilde anlatmalıyız ki bilgisayar denen araccedil
bizim isteklerimize paralel cevap versin Bunlardan dolayı programlama
duumlnyasına yeni gelmiĢ bilgiye susamıĢ olan arkadaĢlar oumlncelikle oumlğrenmeniz
gereken Ģey bilgisayarın dilini oumlğrenmek Bu sektoumlrde bu kavrama
programlama dili deniliyor ( amacı gerccedilekleĢtirmek iccedilin yazılmıĢ kod
listesidir)piyasaya bakıldığı zaman programlama dilerin sayısı oldukccedila fazla
1000 veya 300 diyenler vardır Buumltuumln ortaya ccedilıkan bu diller bir amaccedil ve ihtiyaccedil
doğrultusunda ortaya ccedilıkmıĢtır Peki hiccedil bir Ģeyden haberi olmayıp bu sektoumlre
yeni gelen biri iccedilin bu dillerden hangisine kullanarak kendini en bağıt
goumlsteriĢsiz sade bir Ģekilde kendini bilgisayara ifade etmelidir Bu sorunun
cevabını bulan arkadaĢ bilgisayarı basit duumlzeyden anladıktan sonra karmaĢık
yapısını anlamaya ccedilalıĢarak yola devam eder
Yukarıdaki sorunun cevabı bizim bu pdf de anlatacağımız Scheme
dilinde gizlidir
Scheme dilinin genel oumlzeliklerini derleyicini oumlrnek kodlar ve
uygulamalarla değerli okuyucularımıza goumlstermek istiyoruz
Bu dili oumlğrenmeye teĢvik eden değerli hocamız YUNUS OumlZEN
teĢekkuumlrlerimizi sunuyoruz
Ġnsanoğlunun aklı korkusu merakı yaratma guumlcuuml hep var olacaktır
Bunlar var oldukccedila imkacircnsıza kafa tutmaya devam edecektir
Yeni doumlnemler yeni programlar yeni makineler demektir Her yenilik bilgi
kaynaklarımızı artıracaktır
SCHEME DİLİ HAKKINDA GENEL OumlZELLIKLER
Bilgisayar bilimi ve muumlhendisliği eğitimlerinde Schemede yazılan programlar genelde yorumlayıcı tarafından yorumlanır Bu iĢlem yavaĢ
ve pek uumlretken olmayan bir youmlntemdir fakat temel algoritmik kavramların anlaĢılmasını kolaylaĢtırdığından tercih edilir
Scheme aynı zamanda ccedileĢitli derleyicilere (Chicken Stalin Chez Ikarus gibi) de sahiptir
Bunun dıĢında Scheme birccedilok paradigmayı iccedilinde barındıran bir programlama dilidir(fonksiyonel programlama baĢta olmak uumlzere)
EĢzamanlı hesaplama dilinin bazı oumlzelliklerini de taĢımaktadır
Scheme yorumlayıcısı (interpreter) eĢzamanlaĢıcısı (synchronizers) ve değiĢken huumlcreleri iccedilin gereken temel oumlzellikleri iccedilinde barındırmamaktadır
Scheme bir paralel programlama dili olmasa da taĢıdığı oumlzelliklerle tam olarak bir fonksiyonel programlama dilidir
Ayrıca Scheme buyurgan bir youmlne de sahiptir ama bu dili gerek akademik duumlnyada gerekse sektoumlrde oumlne ccedilıkaran ve tercih edilmesine sebep olan youmlnuuml fonksiyonel paradigmaya olan uygunluğudur
Ccedilok az sayıda programlama kuralıyla anlatımlar oluĢturulmasını sağlar
Pratik ve yalın yapısıyla guumlnuumlmuumlzde var olan pek ccedilok programlama kavramını destekler
Lisp lehccedilesidir
Genelde hızlı olmasını yapay zekacirc iĢlerinde kullanılmasında yardımcı olur
Dikkat ccedileken bir dil guumlzel sevimli ama akademik ortamlar dıĢında pratik bir kullanımı yoktur
Temel ilgi yazılım geliĢtirmeye uygunluktan ccedilok verimliliktir
Sadece statik kapsam kullanır
Dinamik olarak tuumlr belirtilen bir fonksiyonel programlama dilidir
Sembolik bir programlama dilidir
Programlama ortamı olarak Drscheme programı kullanmaktadır
DrScheme Scheme programlama dili iccedilin grafiksel bir ortam sunmaktadır
BU DİL NEDEN EĞİTİM DİLİ OLARAK VERİLMELİDİR
BaĢlangıccedil duumlzeydeki bir oumlğrenciyi ele alırsak ona imperative bir dil
oumlğretmeye kalkarsak mesela (basic veya pascal ) oumlğrencinin soyut
duumlĢuumlnmesini kısıtlarız
Ccediluumlnkuuml oumlğrenci problemin ccediloumlzuumlmuumlnuuml duumlĢuumlk soyutlama dilinde ifade
etmede zorlanıyor Aynı durum mantıksal diller iccedilinde geccedilerlidir (prolog)
amacımız baĢlangıccedil seviyesinde olan oumlğrenciye soyut fakat yordamsal
duumlĢuumlnme yeteneğini oumlğretmek Buna uygun olarak fonksiyonel bir dil olabilir
Fonksiyonel dilin yapısı oumlğrencinin matematik bilgisine dayanır mesela liseden
fonksiyonları kuumlme dizi ve mantık kavramların bilinmesi gibi Boumlylece oumlğrenci
elinde olan problemi ccediloumlzmek iccedilin ve bunu bilgisayara aktarmanın en iyi yolu
fonksiyonel bir dil seccedilimidir
Fonksiyonel olarak Scheme dilinin seccedililmesinin oumlnemli nedenleri vardır
1 Dil iĢlemcisini lisans sorunu olmadan bulmak
2 Basit soumlz dizimin olması yani dilin yazım kuralarını zahmetsizce oumlğrenilebilir
3 Veri tipi sadeliği ve dinamik olarak denetlenmesi bu maddeyi accedilıklarsak
oumlğrenci tamsayı reel sayı ayırımını oumlğrenip değiĢkenlerini buna goumlre
tanımlamak zorunda kalmayacak boumlylece oumlğrenci buumltuumln dikkatini problemin
ccediloumlzuumlmuumlne odaklayacak yazım kurallarıyla uğraĢmayacak
4Yorumlayıcı ve etkileĢimli olarak ccedilalıĢma ortamı geri bildirimi
hızlandırdığından oumlğrenme suumlresini hızlandırıyor
5bunları kullanarak dili zorlaĢtıracak ayrıntılara boğulmadan problemleri
ccediloumlzebilecektir
TARİHİ GELİŞİMİ
Scheme 1970 yılı ortalarında MIT profesoumlrleri Guy Lewis Steele ve Gerald Jay Sussman tarafından geliĢtirilmiĢ fonksiyonel bir dildir
BaĢlangıccedilta Sussman ve Hewitt birlikte MDL(MIT Design Language) uumlzerinde bir ccedilalıĢma yaptılar ( MDL Carl Hewittin Planner adlı projesi iccedilin geniĢletilmiĢ bir LISP diyalektidir )
1971 yılında Sussman ve bir grup Profesoumlr Micro-plannerı geliĢtirdiler
Ardından Conniver adında yine LISP tabanlı bir programlama dili geliĢtirdiler( ama bu ccedilalıĢmaların sonuccedillarını pek uumlretken bulamadılar ve farklı yollara youmlneldiler Steele oumlğrenimi suumlresinde dıĢarıdaki geliĢmeleri duumlzenli olarak takip ediyordu
Steele mezun olmasının ardından Sussman ile birlikte MacLisp programlama dilini kullanarak kendilerine ait LISPlerini geliĢtirdi
Daha sonra bu mekanizmayı geliĢtirerek kendi modellerini actor oluĢturabilecek ve mesaj goumlnderebilecek duumlzeye getirmeyi baĢardılar
GeliĢtirdikleri modelleme ccedilalıĢmaları iyiye gidince bu modele Schemer adını verdiler ama daha sonra ana sistem uumlzerine kurulmuĢ ITS dosya sisteminin 6 karakter limitine uymak iccedilin adını Scheme olarak değiĢtirdiler
1973 yılında MIT profesoumlrlerinden Carl Hewitt eĢzamanlı hesaplamada actor model adında matematiksel bir model geliĢtirdi
Sussman ve Steele bu modele daha iyi bir anlam kazandırmak amacıyla Scheme programlama dilini oluĢturdular
Sussman ve Steelein ccedilalıĢmalarıyla kuumlccediluumlk ve yeterli bir LISP diyalekti ortaya ccedilıkmıĢ oldu
1980 den beri geliĢtirilmiyor
IEEE tarafından 1978ndash1990 ile standartlaĢtırılmıĢtır
ġu anda R6RS (Revised6 Report on the Algorithmic Language Scheme) en son kabul edilen rapordur
MITlsquo de lisans oumlğrencilerine ilk programlama dersi olarak verilmekteydi
MIT profesoumlrlerinden Harold Abelson ve Gerald Jay Sussman tarafından yazılmıĢ ve ilk baskısı 1984 yılında oluĢturulmuĢ
Structure ve Interpretation of Computer Programs kitabı derslerde kullanılmaktadır Orta Doğu Teknik Uumlniversitesinde de boumlluumlme giren oumlğrenciler programlama duumlnyasındaki ilk adımlarını Scheme programlama dilini oumlğrenerek baĢlamaktadır
Ders kitabı olarak zamanın MIT profesoumlrlerinden Biran Harvey(UC Berkeley) ve Matthew Wright tarafından yazılmıĢ Simply Scheme adlı kitap kullanılmaktadır
KISACA
1 Ġlk ccedilıkıĢı 1975 2 TASARIMCISI Guy L Steele ve Gerald Jay Sussman 3 SUumlRUumlMUumlR6RS (onaylı standart) (2007) 4 TIP SĠSTEMĠ guumlccedilluuml dinamik
5 ETKĠLENDĠKLERI DĠL Lisp ALGOL MDL 6 ETKILEDIĞI DIL Common Lisp EuLisp JavaScript R Ruby Dylan
Lua Hop Racket 7 DOSYA UZANTISIscm ss 8 PARADĠKMASI fonksiyonel meta yordamsal
Scheme dili fonksiyonel bir dildir
Nesneye dair hiccedil bir Ģey yoktur Yorumlayıcı tarafından yorumlanan
fonksiyonel bir dildir
Yani programlar matematiksel fonksiyonlar tarafından yapılır
Fonksiyonların aldıkları girdi ve ccedilıktı sabittir
Programa girilen değere goumlre fonksiyonda bir değiĢiklik yapmadan
fonksiyonu aynen uygular Atama deyimleri bulunmaz
DeğiĢken değerleri bir defa atanır ve bir daha değiĢmez Fonksiyonel
programların artılarından biri bir fonksiyonu ccedilağırmanın kendi sonucunu
geriye doumlnduumlrmekten baĢka bir sonucu olmadığından bug oluĢumunu
engeller
EDİTOumlR KURULUMU
Bu linkten ldquo httpracket-langorgdownload ldquo editoumlruuml indirilebilir
Next diyoruz
Next diyoruz
Install diyoruz
Bu boumlluumlm bittikten sonra editoumlruumlmuumlzuumln kurulumu tamamlanmış olacaktır
EDİTOumlR TANITIMI
FILE MENUumlSUuml
mdashNEW yeni sayfa accedilar
mdashNEW TAB yeni bir sekme accedilar
mdashOPEN oumlnceden yapılmıĢ dosyayı accedilar
mdashOPEN RECENT en son accedilılmıĢ olan sayfayı accedilar
mdashINSTALL PLT FILE buna tıkladığımızda WEB ve FILE diye 2 kısım
karsımıza ccedilıkar
WEB de web den dosya yuumlklemek iccedilin (URL) giriyoruz
FILE da ise bilgisayarda bulunan herhangi bir DrScheme projesini accedilmak
iccedilin kullanıyoruz
mdashREVERT projeyi en son derlenmiĢ haline doumlnduumlruumlr Yani derlendikten
sonraki değiĢiklikleri siler
mdashSAVE DEFINITIONS projeyi kaydeder
mdash SAVE DEFINITIONS AS projeyi farklı isimde kaydetmek iccedilin kullanılır
mdashPRINT DEFINITIONS projeyi yazıcıdan ccedilıkarmak iccedilin kullanılır
mdashPRINT INTERACTION projenin ccedilıktısını yazıcıdan ccedilıkarmak iccedilin kullanılır
EDIT MENUumlSUuml
mdashUNDO (ctrl+z) geri alma goumlrevini yapar
mdashREDO (ctrl+y) ileri alma goumlrevini yapar
mdashOVERWRITE MODE C dilindeki INSERT gibi yeni harfi eski harfin uumlzerine
yazar Bir ya da birkaccedil harfi değiĢtirir(Biz uumlzerine gelip tıkladıktan sonra
yazarken değiĢtirir)
mdashWRAP TEXT kod satırları uzadığında kodlar otomatik alt satıra geccediler
mdashFIND ekranda yazılanları değiĢtirmek iccedilin kullanılır FIND a tıkladığımızda alt
kısımda ccedilıkan alana değiĢtirmek istediğimiz yeni değeri yazdığımızda editoumlr
bulduğu kelimeleri yuvarlak iccediline alınır
mdashREPLACE değiĢtirmek istenen yeri yazıyoruz(Ccedilıkan iki kutudan birine nereyi
değiĢtireceğimizi diğerine neyle değiĢtireceğimizi yazarız)
mdashHĠDE REPLACE atadığımız yeni değeri gizler
mdashKEY BINDING anahtar kelimeler
mdashPREFERENCES buradan oumlzellikleri ayarlıyoruz Oumlrneğin
FONT SĠZE yazının buumlyuumlkluumlğuumlnuuml
FONT NAME yazının ismini
COLORS da Background Color arka plan rengini ayarlar
SCHEME symbol keyword string vb yazının rengi tipi koyuluğunu
değiĢtirmek iccedilin kullanılır
FIND CASE SENSTĠVE kuumlccediluumlk buumlyuumlk harfe duyarlı olup olmadığını
goumlsterir Ġstersek ayarlayabiliriz
VIEW MENUumlSUuml
mdashHIDE DEFINITION kodların yazıldığı ekranı gizler(uumlst kısım)
mdashHIDE INTERACTION ccedilıktıların yazılı olduğu ekranı gizler(alt kısım)
mdashUSE HORIZONTAL LAYOUT editoumlruumlmuumlzdeki alttaki kısmı yanda goumlsterir
mdashSHOW PROGRAM COUNTER definition kısmındaki kodların toplu
goumlruumlnduumlğuuml ekranı getirir
mdashTOOLBAR
mdash TOOLBAR ON LEFT toolbarı solda goumlsterir mdash TOOLBAR ON RIGHT toolbarı sağda goumlsterir mdash TOOLBAR ON TOP toolbarı tepede goumlsterir mdash TOOLBAR ON HIDDEN toolbarı tamamen saklar mdashSHOW LĠNE NUMBERS sol tarafta satırlara sıra no verir
mdashSPLIT ekranın uumlst kısmını 2 ye ayırır(alt alta)
mdashCOLLAPSE ekranı eski haline getirir
LANGUAGE MENUumlSUuml
mdashCHOOSE LANGUAGE dil seccedilimi yapmayı sağlar Kullanıcı seviyesine goumlre dili seccediler Bazı
komutlar her dilde ccedilalıĢmamaktadır Oumlrnegin
BEGINNING STUDENT seccedilildiğinde Display komutu ccedilalıĢmaz
PRETTY BIG seccedilildiğinde ccedilalıĢır
RACKET MENUumlSUuml
mdashRUN programı ccedilalıĢtırır
mdashLIMIT MEMORY -unlimited
mdashlimited
Bu oumlzellikle varsayılan limit(128mb) olan bu hafızayı
değiĢtirebiliyoruz Boumlylece proje bize lazım olan hafıza kadar yer tutuyor
fazlasını tutmuyor
mdashCREATE EXECUTABLE Exe oluĢturmamızı sağlar
mdashCOMMENT OUT WĠTH A BOX kutu iccedilinde yorum satırı oluĢturmamızı
sağlar
mdashCOMMENT OUT WĠTH SEMĠCOLONS ( ) noktalı virguumll kullanarak yorum
satırı oluĢturmamızı sağlar
INSERT MENUumlSUuml
mdashINSERT COMMENT BOX kutu iccedilinde yorum satırı eklemeyi sağlar
mdashINSERT IMAGE resim eklenir
mdashINSERT FRACTION kesirli sayı oluĢturmak iccedilin kullanılır
mdashCHECK SYNTAX yazım hatalarını kontrol eder
mdashMACRO STEPPER kodu satır ccedilalıĢtırarak ilerler C taki F11 tuĢu gibi
ccedilalıĢır
Editoumlr uumlzerinde ise
Sağ alttaki ccedilarpı alt ekranı kapatmamızı sağlar
Sağ alt koumlĢedeki sayılar imlecin bulunduğu satır ve suumltunu goumlsterir
Sol altta seccediltiğimiz dil yazılıdır Uumlzerine tıkladığımızda daha oumlnceden
kullandığımız dillerin listesi goumlruumlnuumlr
DOSYA İŞLEMLERİ
Open-input-file Okunacak dosyayı accedilar
Open-output-file Yazılacak dosyayı accedilarDosya oumlnceden oluĢturulmamıĢsa oluĢturur
Close-input-port Input dosyasını kapatır
Close-output-port Output dosyasını kapatır
Read-char Dosyadan bir karakter okuduktan sonra imleci diğer karaktere taĢır Peek-char read-charlsquodan farkı imleci taĢımaz
Read-string Belirtilen sayı kadar karakter okur
Read-line Satır okur
Write Dosyaya string ifadeyi tırnak iĢaretleriyle birlikte yazar
Display Dosyaya string ifadeyi tırnak iĢaretleri olmadan yazar
Write-string Dosyaya string ifadeyi tırnak iĢaretleri olmadan yazar ayrıca karakter saysını
alt ekranda goumlsterir
With-input-from-file with-output-to-file Dosya accedilma kapatma iĢlemini otomatik yapıp
verilen proseduumlruuml uygular
Oumlrnek kodlar
Dosyadan okuma
Dosyada Scheme is fun
Write with Schemelsquo yazılıdır
(define p (open-input-file testtxt)) (read p)
(read-line p)
(read-string 300 p)
(close-input-port p) Ccedilıktısı Scheme is funr
Write with Scheme
----------------------
(with-input-from-file testtxt
(lambda ()
(read) ))
Ccedilıktısı Scheme
Dosyaya yazma
(define y merhaba)
(define p (open-output-file testtxt))
(write y p)
(display y p)
(write ifade p )
(write-char k p)
(close-output-port p)
-------------------------
(with-output-to-file test2txt
(lambda ()
(display Hello world) ))
---------------------------
KULLANICI ETKİLEŞİMİ
Bu dilde fonksiyonlar değiĢkenlere değer olarak atanan veya fonksiyonlara
delil olarak geccedilirilebilir Schemelsquode Scheme kodunu oluĢturan ve
yorumlanmasını(interpretation) isteyen bir fonksiyon tanımlamak muumlmkuumlnduumlr
Bu muumlmkuumlnduumlr ccediluumlnkuuml yorumlayıcı(interpreter) kullanıcı tarafından
eriĢilebilen(user-available) bir fonksiyondur Fonksiyonel dillerin tasarımı
Matematiksel Fonksiyonlara dayalıdır
Kullanıcıya da yakın olan sağlam bir teorik temel fakat nispeten programların
koĢacağı makinelerin mimarileriyle ilgisizdir
Schemelsquoi ayrıca diğer dillerden ayıra en oumlnemli oumlzelliklerden biri de ccedilalıĢma
esnasında uygulamaya muumldahale edebilme iznini vermesidir Bu oumlzellik
sadece oumlnceden derlenmiĢ ve ağır plug-inler aracılığı ile geniĢletilen
uygulamalara kıyasla ccedilok daha buumlyuumlk bir avantaj
FONKSİYONLAR
Bu dilde fonksiyonlar birinci-sınıf varlıklardır(entities)
ndashĠfadelerin(expressions) değerleri ve listelerin elemanları olabilirler
ndashDeğiĢkenlere(variables) atanabilirler ve parametrelere geccedililebilirler
Scheme dilindeki formlar ikiye ayrılır
Temel Formlar define lambda if quote unquote unquote-splicing
quasiquote define-syntax let-syntax letrec-syntax syntax-rules set
( 5 4) sonuccedil olarak karĢımıza ccedilikacaktir
Ifadesi de yorum satırı haline getirir kodu
Ġf deyimini oumlrnekle accedilıklayalım
(If lsaquo expr rsaquo lsaquoexpr rsaquo lsaquoexpr rsaquo)
(If (= (+ 4 5) 9) t f)
Burada ilk verdiğimiz arguumlman (= (+ 4 5) 9) iĢleminin doğru olup
olmadığına bakar Eğer iĢlem doğruysa ccedilıktı olarak t yanlıĢsa f doumlner
Anlayacağınız uumlzere bu oumlzel durum proseduumlruuml koĢul gerektiren bir proseduumlr
bu durumda ilk verdiğimiz arguumlman da koĢulu belirleyen parccedila oluyor Oumlnce
o koĢulu inceleyen yorumlayıcı da daha sonra verdiğimiz diğer arguumlmanları
koĢula goumlre seccedilerek bize gereken ccedilıktıyı veriyor
Cond deyimi( cond[ltİfadegt ltİfadegt] )
Bir soruya dayalı alternatif cevapları seccedilmek istiyorsanız cond ifadesi kullanılır
ġart ifadesidir
Cond Ģeklinde koumlĢeli parantez maddeler dizisi iccedilerir
(Cond
((ltSıcaklık 50) Soğuk)
((gt Sıcaklık 90) Ccedilok sıcak )
(else Sorun yok))
Ayrıca else Scheme dilinde cond ifadesiyle kullanılır diğer dillerde olduğu gibi if
le değil Else ifadesi ise diğer koĢullar olmadığında else koĢulu olacaktır
Do ifadesi
(do ((i 0 (+ i 1))) ((gt i 2)) (display i) (newline))
Programın ccedilıktısı
0
1
2 dir Ġlk oumlnce i ye 0 atıyor ve i yi 1 er 1 er artırarak i 2 den buumlyuumlk olana
kadar doumlnduumlruumlyor display ile de ekrana yazdırıyornewline satırı ilede bir alt
satıra geccediliyor
While ifadesi
(While (koĢul ))
(Deyim1)
(Deyim2)
)
Let ifadesi
(let ((x 5)) ( x 2))
Ekran ccedilıktısı ise 10 olurLet yanındaki ilk koĢul ifadesinde değer ataması
yapılır ve diğer ifadede de matematiksel iĢlemi gerccedilekleĢtirir
Listeler
List fonksiyonu herhangi bir sayı alır ve değerlerini iccedileren bir liste doumlnduumlruumlr
gt(listKırmızı YeĢil Mavi)
(Kırmızı yeĢilmavi)
gt(list 1 2 3 4 5)
(1 2 3 4 5)
LIST
ndash Herhangi bir sayıda parametre alır elemanları bu parametreler olan bir liste
doumlnduumlruumlr
Ayrıca Bizim listelerde bulmak iccedilin uğraĢtığımız problemler iccedilin direk
fonksiyonlar var Mesela
first listenin ilk elemanını alır
Rest listenin ilk elemanı haricindekileri alır
gt (first (list 1 2 3 ))
1
gt(rest (list 1 2 3 ))
2 3
Listeler iccedilin bir oumlrnek daha
gt( list ( list 1 2 3 ) 5 (list a b c) )
((1 2 3) 5 (a b c))
Hello World Uygulaması
Programlamaya ilk baslayan herkesin yaptığı gibi bizde scheme dilinde
ekrana ―hello world yazdiralimScheme dilinde farkli seviyelerde farklı kodlar
kullanilirPretty Big de hemen hemen buumltuumln kodlar ccedilalıĢtığı iccedilin biz genelde bu
level ı kullaniyoruz
Display ―Hello World
(write Hello World )
―Hello World
Yukarı da goumlruumllen kodlar ccedilalıĢtırıldığında aynı ekran ccedilıktısına sahip
olurlarGoumlruumllduumlğuuml gibi ne noktalı virguumll nede fazla kelimeye gerek kalmıyor
Matematik Fonksiyonları
(Exp x) e^x in sonucunu doumlnduumlruumlr
(Log x) x sayısının logaritma değerini doumlnduumlruumlr
(sqrt x) x koumlkuumlnuumln karesini doumlnduumlruumlr
(max x1 x2) verilen listeden en buumlyuumlk sayıyı doumlnduumlruumlr
(min x1 x2) verilen listeden en kuku sayıyı doumlnduumlruumlr
(quotient x1 x2) x1x2 kesrinin boumlluumlmuumlnuuml doumlnduumlruumlr
(remian x1 x2) x1x2 kesrinin kalanini doumlnduumlruumlr
(modula x1 x2) x1 in x2 ye moduumlluuml sonucunu doumlnduumlruumlr
(gcm num1 num2 ) Verilen listenin en buumlyuumlk ortak boumlleni doumlnduumlruumlr
(lcm num1 num2 ) Verilen listenin en kuku ortak ccedilarpanı doumlnduumlruumlr
(Ceiling x) x ten kuku olmayan en kuku değeri doumlnduumlruumlr
( turn cate x) Mutlak değeri x in mutlak değerinden buumlyuumlk olmayan Xlsquo en
yakın değeri doumlnduumlruumlr
(round x) xe en yakın değere yuvarlıyor
İlişkisel Operatoumlrler
(=x 1) x 1 ise true doumlnduumlruumlr
(ltx y) x yden kuumlccediluumlkse true doumlnduumlruumlr
(gtx y) x y den buumlyuumlkse true doumlnduumlruumlr
(lt=x y) x yden kuku veya eĢitse true doumlnduumlruumlr
(gt=x y) x yden buumlyuumlk veya eĢitse true doumlnduumlruumlr
(eq x y) x ve y aynı ise true doumlnduumlruumlr
(equal x y) x ve y aynı yapıda olup aynı iccedileriğe sahipse true doumlnduumlruumlr
Tip Yuumlklemeleri
(procedure x)X fonksiyon ise true doumlnduumlruumlr
(null x) X boĢ bir liste ise true doumlnduumlruumlr
(zero x )X sıfır ise true doumlnduumlruumlr
(odd x) X tek ise true doumlnduumlruumlr
(even x) X tek ise true doumlnduumlruumlr
(symbolx) X tek ise true doumlnduumlruumlr
Asal Sayı Bulma Programı
(Define (divides m n)
(Cond
[(zero m) true]
[(amplt m n) false]
[else (divides (- m n) n)]
))
(Define (check-prime prime-cand divisor)
(cond
[(= 1 divisor) true]
[(divides prime-cand divisor) false]
[else (check-prime prime-cand (sub1 divisor))]))
(define (prime x)
(cond
[(= x 0) false]
[(= x 1) false]
[else (check-prime x (- x 1))]
))
KAYNAKLAR
wwwbilgisayarkavramlaricom
httpe-bergicom2010OcakScheme
httpwwwhtdporg2003ndash09ndash26Bookcurriculum-Z-H-1html
httptranslategooglecomtrtranslatehl=tramplangpair=en7Ctrampu=http httpprogramming-musingsorg20091223scheme-lectures-mostly httptranslategooglecomtrtranslatehl=trampsl=enampu=http3A2F2Fw
httpblogyollucomtagscheme
httpwwwschemecomtspl4 httpracket-langorgdownload
PROJE KONUSU SCHEME DİLİNİN OZELİKLERİNİ TAŞIYAN VE BU PDF DE
ANLATILAN KONULAR İLGİLİ 10 SORU HAZIRLANIP BUNLARIN CEVAPLARINI
KULANICIDAN İSTENİLMESİ
PROJEDE KULANILANLAR
LİSTE
FONKSİYON
KOŞUL CUumlMLESİ
DEĞER ATAMALARI
PROJE KODU
(define k 0)
(define doğrular 0)
(define yanlışlar 0)
sorular
(define a 1soru Lamda nedir)
(define A1 1 isimsiz fonksiyonları belirler)
(define B1 2 değer ataması yapar)
(define C1 3 pointer goumlrevi yapar)
(define b 2soru hangisi aritmetik fonksiyon değildir)
(define A2 1 SQRT )
(define B2 2 MIN )
(define C2 3 QUOTE )
(define c 3soru=list kulanımı nasıldır)
(define A3 (1 LIST (A) (B) (C) (D)))
(define B3 (2 LIST A B C D) )
(define C3 (3 LIST A B C D) )
(define d 4soru=equalsimp ne demek)
(define A4 1 iki basit liste alır ve eşitliğini kontrol eder)
(define B4 2 listeleri birbirine atar)
(define C4 3 listeleri eşitler)
(define e1 5soru=append ne işe yarar)
(define A5 1 İki listeyi peş peşe ekler)
(define B5 2 iki listeyi ccedilıkarır)
(define C5 3 iki listeyi ccedilarpar)
(define f 6soru set isimlere değer atar doğrumudur)
(define A6 1 doğru)
(define B6 2 yanlis)
doğru cevap listesi
(define DListe (list 1 1 1 2 3 1) )
şıkları yazdırma
(define (Cevaplar cevapListesi)
( cond [(null cevapListesi) 0]
[else (Cevaplar (rest cevapListesi))
(display (first cevapListesi))
(display n)
]))
doğru yanlış kontroluuml
(define kon
(lambda (k FDL)
(cond ((= k FDL) (display Tebrikler )nn)(set dogrular (+ 1 dogrular)))
else ( display Maalesef olmadı (nn)(set yanlislar (+ 1 yanlislar))])))
soru ve şıkları yazdırıp cevap kontroluumlnuuml ccedilağırma
(define (Sorular soruListesi cevpListesi DListesi )
( cond [(null soruListesi) 0]
[else
(Sorular (rest soruListesi) (rest cevpListesi) (rest DListesi ))
(display (first soruListesi))
(display n)
(Cevaplar (first cevpListesi)) (set k (read)) (kon k (first DListesi)) ]))
şık listesi
(define CListe (list(list B6 A6) (list C5 B5 A5) (list C4 B4 A4) (list C3 B3 A3) (list C2 B2
A2)(list C1 B1 A1)))
Sorular fonksiyonunu ccedilağırma
(Sorular (list f e1 d c b a) CListe DListe )
yapılan doğru ve yanlış sayısını goumlsterme
(display Doğru cevap sayısı )
dogrular
(display Yanlış cevap sayısı )
yanlislar
EMEĞİ GECcedilEN BUumlTUumlN HERKESE TEŞEKUumlRLERİMİZİ SUNUYORUZhellip
Bilgisayar ve yazılım duumlnyasına olan insanlar bilgisayar ile iletiĢim
kurmak zorundalar Bu iletiĢim bazen normal insanlarla olan iletiĢimden daha
zor veya kolay olabiliyor Buna neden olan da kullandığımız iletiĢim aracıdır
Biz kendimizi bilgisayara en iyi Ģekilde anlatmalıyız ki bilgisayar denen araccedil
bizim isteklerimize paralel cevap versin Bunlardan dolayı programlama
duumlnyasına yeni gelmiĢ bilgiye susamıĢ olan arkadaĢlar oumlncelikle oumlğrenmeniz
gereken Ģey bilgisayarın dilini oumlğrenmek Bu sektoumlrde bu kavrama
programlama dili deniliyor ( amacı gerccedilekleĢtirmek iccedilin yazılmıĢ kod
listesidir)piyasaya bakıldığı zaman programlama dilerin sayısı oldukccedila fazla
1000 veya 300 diyenler vardır Buumltuumln ortaya ccedilıkan bu diller bir amaccedil ve ihtiyaccedil
doğrultusunda ortaya ccedilıkmıĢtır Peki hiccedil bir Ģeyden haberi olmayıp bu sektoumlre
yeni gelen biri iccedilin bu dillerden hangisine kullanarak kendini en bağıt
goumlsteriĢsiz sade bir Ģekilde kendini bilgisayara ifade etmelidir Bu sorunun
cevabını bulan arkadaĢ bilgisayarı basit duumlzeyden anladıktan sonra karmaĢık
yapısını anlamaya ccedilalıĢarak yola devam eder
Yukarıdaki sorunun cevabı bizim bu pdf de anlatacağımız Scheme
dilinde gizlidir
Scheme dilinin genel oumlzeliklerini derleyicini oumlrnek kodlar ve
uygulamalarla değerli okuyucularımıza goumlstermek istiyoruz
Bu dili oumlğrenmeye teĢvik eden değerli hocamız YUNUS OumlZEN
teĢekkuumlrlerimizi sunuyoruz
Ġnsanoğlunun aklı korkusu merakı yaratma guumlcuuml hep var olacaktır
Bunlar var oldukccedila imkacircnsıza kafa tutmaya devam edecektir
Yeni doumlnemler yeni programlar yeni makineler demektir Her yenilik bilgi
kaynaklarımızı artıracaktır
SCHEME DİLİ HAKKINDA GENEL OumlZELLIKLER
Bilgisayar bilimi ve muumlhendisliği eğitimlerinde Schemede yazılan programlar genelde yorumlayıcı tarafından yorumlanır Bu iĢlem yavaĢ
ve pek uumlretken olmayan bir youmlntemdir fakat temel algoritmik kavramların anlaĢılmasını kolaylaĢtırdığından tercih edilir
Scheme aynı zamanda ccedileĢitli derleyicilere (Chicken Stalin Chez Ikarus gibi) de sahiptir
Bunun dıĢında Scheme birccedilok paradigmayı iccedilinde barındıran bir programlama dilidir(fonksiyonel programlama baĢta olmak uumlzere)
EĢzamanlı hesaplama dilinin bazı oumlzelliklerini de taĢımaktadır
Scheme yorumlayıcısı (interpreter) eĢzamanlaĢıcısı (synchronizers) ve değiĢken huumlcreleri iccedilin gereken temel oumlzellikleri iccedilinde barındırmamaktadır
Scheme bir paralel programlama dili olmasa da taĢıdığı oumlzelliklerle tam olarak bir fonksiyonel programlama dilidir
Ayrıca Scheme buyurgan bir youmlne de sahiptir ama bu dili gerek akademik duumlnyada gerekse sektoumlrde oumlne ccedilıkaran ve tercih edilmesine sebep olan youmlnuuml fonksiyonel paradigmaya olan uygunluğudur
Ccedilok az sayıda programlama kuralıyla anlatımlar oluĢturulmasını sağlar
Pratik ve yalın yapısıyla guumlnuumlmuumlzde var olan pek ccedilok programlama kavramını destekler
Lisp lehccedilesidir
Genelde hızlı olmasını yapay zekacirc iĢlerinde kullanılmasında yardımcı olur
Dikkat ccedileken bir dil guumlzel sevimli ama akademik ortamlar dıĢında pratik bir kullanımı yoktur
Temel ilgi yazılım geliĢtirmeye uygunluktan ccedilok verimliliktir
Sadece statik kapsam kullanır
Dinamik olarak tuumlr belirtilen bir fonksiyonel programlama dilidir
Sembolik bir programlama dilidir
Programlama ortamı olarak Drscheme programı kullanmaktadır
DrScheme Scheme programlama dili iccedilin grafiksel bir ortam sunmaktadır
BU DİL NEDEN EĞİTİM DİLİ OLARAK VERİLMELİDİR
BaĢlangıccedil duumlzeydeki bir oumlğrenciyi ele alırsak ona imperative bir dil
oumlğretmeye kalkarsak mesela (basic veya pascal ) oumlğrencinin soyut
duumlĢuumlnmesini kısıtlarız
Ccediluumlnkuuml oumlğrenci problemin ccediloumlzuumlmuumlnuuml duumlĢuumlk soyutlama dilinde ifade
etmede zorlanıyor Aynı durum mantıksal diller iccedilinde geccedilerlidir (prolog)
amacımız baĢlangıccedil seviyesinde olan oumlğrenciye soyut fakat yordamsal
duumlĢuumlnme yeteneğini oumlğretmek Buna uygun olarak fonksiyonel bir dil olabilir
Fonksiyonel dilin yapısı oumlğrencinin matematik bilgisine dayanır mesela liseden
fonksiyonları kuumlme dizi ve mantık kavramların bilinmesi gibi Boumlylece oumlğrenci
elinde olan problemi ccediloumlzmek iccedilin ve bunu bilgisayara aktarmanın en iyi yolu
fonksiyonel bir dil seccedilimidir
Fonksiyonel olarak Scheme dilinin seccedililmesinin oumlnemli nedenleri vardır
1 Dil iĢlemcisini lisans sorunu olmadan bulmak
2 Basit soumlz dizimin olması yani dilin yazım kuralarını zahmetsizce oumlğrenilebilir
3 Veri tipi sadeliği ve dinamik olarak denetlenmesi bu maddeyi accedilıklarsak
oumlğrenci tamsayı reel sayı ayırımını oumlğrenip değiĢkenlerini buna goumlre
tanımlamak zorunda kalmayacak boumlylece oumlğrenci buumltuumln dikkatini problemin
ccediloumlzuumlmuumlne odaklayacak yazım kurallarıyla uğraĢmayacak
4Yorumlayıcı ve etkileĢimli olarak ccedilalıĢma ortamı geri bildirimi
hızlandırdığından oumlğrenme suumlresini hızlandırıyor
5bunları kullanarak dili zorlaĢtıracak ayrıntılara boğulmadan problemleri
ccediloumlzebilecektir
TARİHİ GELİŞİMİ
Scheme 1970 yılı ortalarında MIT profesoumlrleri Guy Lewis Steele ve Gerald Jay Sussman tarafından geliĢtirilmiĢ fonksiyonel bir dildir
BaĢlangıccedilta Sussman ve Hewitt birlikte MDL(MIT Design Language) uumlzerinde bir ccedilalıĢma yaptılar ( MDL Carl Hewittin Planner adlı projesi iccedilin geniĢletilmiĢ bir LISP diyalektidir )
1971 yılında Sussman ve bir grup Profesoumlr Micro-plannerı geliĢtirdiler
Ardından Conniver adında yine LISP tabanlı bir programlama dili geliĢtirdiler( ama bu ccedilalıĢmaların sonuccedillarını pek uumlretken bulamadılar ve farklı yollara youmlneldiler Steele oumlğrenimi suumlresinde dıĢarıdaki geliĢmeleri duumlzenli olarak takip ediyordu
Steele mezun olmasının ardından Sussman ile birlikte MacLisp programlama dilini kullanarak kendilerine ait LISPlerini geliĢtirdi
Daha sonra bu mekanizmayı geliĢtirerek kendi modellerini actor oluĢturabilecek ve mesaj goumlnderebilecek duumlzeye getirmeyi baĢardılar
GeliĢtirdikleri modelleme ccedilalıĢmaları iyiye gidince bu modele Schemer adını verdiler ama daha sonra ana sistem uumlzerine kurulmuĢ ITS dosya sisteminin 6 karakter limitine uymak iccedilin adını Scheme olarak değiĢtirdiler
1973 yılında MIT profesoumlrlerinden Carl Hewitt eĢzamanlı hesaplamada actor model adında matematiksel bir model geliĢtirdi
Sussman ve Steele bu modele daha iyi bir anlam kazandırmak amacıyla Scheme programlama dilini oluĢturdular
Sussman ve Steelein ccedilalıĢmalarıyla kuumlccediluumlk ve yeterli bir LISP diyalekti ortaya ccedilıkmıĢ oldu
1980 den beri geliĢtirilmiyor
IEEE tarafından 1978ndash1990 ile standartlaĢtırılmıĢtır
ġu anda R6RS (Revised6 Report on the Algorithmic Language Scheme) en son kabul edilen rapordur
MITlsquo de lisans oumlğrencilerine ilk programlama dersi olarak verilmekteydi
MIT profesoumlrlerinden Harold Abelson ve Gerald Jay Sussman tarafından yazılmıĢ ve ilk baskısı 1984 yılında oluĢturulmuĢ
Structure ve Interpretation of Computer Programs kitabı derslerde kullanılmaktadır Orta Doğu Teknik Uumlniversitesinde de boumlluumlme giren oumlğrenciler programlama duumlnyasındaki ilk adımlarını Scheme programlama dilini oumlğrenerek baĢlamaktadır
Ders kitabı olarak zamanın MIT profesoumlrlerinden Biran Harvey(UC Berkeley) ve Matthew Wright tarafından yazılmıĢ Simply Scheme adlı kitap kullanılmaktadır
KISACA
1 Ġlk ccedilıkıĢı 1975 2 TASARIMCISI Guy L Steele ve Gerald Jay Sussman 3 SUumlRUumlMUumlR6RS (onaylı standart) (2007) 4 TIP SĠSTEMĠ guumlccedilluuml dinamik
5 ETKĠLENDĠKLERI DĠL Lisp ALGOL MDL 6 ETKILEDIĞI DIL Common Lisp EuLisp JavaScript R Ruby Dylan
Lua Hop Racket 7 DOSYA UZANTISIscm ss 8 PARADĠKMASI fonksiyonel meta yordamsal
Scheme dili fonksiyonel bir dildir
Nesneye dair hiccedil bir Ģey yoktur Yorumlayıcı tarafından yorumlanan
fonksiyonel bir dildir
Yani programlar matematiksel fonksiyonlar tarafından yapılır
Fonksiyonların aldıkları girdi ve ccedilıktı sabittir
Programa girilen değere goumlre fonksiyonda bir değiĢiklik yapmadan
fonksiyonu aynen uygular Atama deyimleri bulunmaz
DeğiĢken değerleri bir defa atanır ve bir daha değiĢmez Fonksiyonel
programların artılarından biri bir fonksiyonu ccedilağırmanın kendi sonucunu
geriye doumlnduumlrmekten baĢka bir sonucu olmadığından bug oluĢumunu
engeller
EDİTOumlR KURULUMU
Bu linkten ldquo httpracket-langorgdownload ldquo editoumlruuml indirilebilir
Next diyoruz
Next diyoruz
Install diyoruz
Bu boumlluumlm bittikten sonra editoumlruumlmuumlzuumln kurulumu tamamlanmış olacaktır
EDİTOumlR TANITIMI
FILE MENUumlSUuml
mdashNEW yeni sayfa accedilar
mdashNEW TAB yeni bir sekme accedilar
mdashOPEN oumlnceden yapılmıĢ dosyayı accedilar
mdashOPEN RECENT en son accedilılmıĢ olan sayfayı accedilar
mdashINSTALL PLT FILE buna tıkladığımızda WEB ve FILE diye 2 kısım
karsımıza ccedilıkar
WEB de web den dosya yuumlklemek iccedilin (URL) giriyoruz
FILE da ise bilgisayarda bulunan herhangi bir DrScheme projesini accedilmak
iccedilin kullanıyoruz
mdashREVERT projeyi en son derlenmiĢ haline doumlnduumlruumlr Yani derlendikten
sonraki değiĢiklikleri siler
mdashSAVE DEFINITIONS projeyi kaydeder
mdash SAVE DEFINITIONS AS projeyi farklı isimde kaydetmek iccedilin kullanılır
mdashPRINT DEFINITIONS projeyi yazıcıdan ccedilıkarmak iccedilin kullanılır
mdashPRINT INTERACTION projenin ccedilıktısını yazıcıdan ccedilıkarmak iccedilin kullanılır
EDIT MENUumlSUuml
mdashUNDO (ctrl+z) geri alma goumlrevini yapar
mdashREDO (ctrl+y) ileri alma goumlrevini yapar
mdashOVERWRITE MODE C dilindeki INSERT gibi yeni harfi eski harfin uumlzerine
yazar Bir ya da birkaccedil harfi değiĢtirir(Biz uumlzerine gelip tıkladıktan sonra
yazarken değiĢtirir)
mdashWRAP TEXT kod satırları uzadığında kodlar otomatik alt satıra geccediler
mdashFIND ekranda yazılanları değiĢtirmek iccedilin kullanılır FIND a tıkladığımızda alt
kısımda ccedilıkan alana değiĢtirmek istediğimiz yeni değeri yazdığımızda editoumlr
bulduğu kelimeleri yuvarlak iccediline alınır
mdashREPLACE değiĢtirmek istenen yeri yazıyoruz(Ccedilıkan iki kutudan birine nereyi
değiĢtireceğimizi diğerine neyle değiĢtireceğimizi yazarız)
mdashHĠDE REPLACE atadığımız yeni değeri gizler
mdashKEY BINDING anahtar kelimeler
mdashPREFERENCES buradan oumlzellikleri ayarlıyoruz Oumlrneğin
FONT SĠZE yazının buumlyuumlkluumlğuumlnuuml
FONT NAME yazının ismini
COLORS da Background Color arka plan rengini ayarlar
SCHEME symbol keyword string vb yazının rengi tipi koyuluğunu
değiĢtirmek iccedilin kullanılır
FIND CASE SENSTĠVE kuumlccediluumlk buumlyuumlk harfe duyarlı olup olmadığını
goumlsterir Ġstersek ayarlayabiliriz
VIEW MENUumlSUuml
mdashHIDE DEFINITION kodların yazıldığı ekranı gizler(uumlst kısım)
mdashHIDE INTERACTION ccedilıktıların yazılı olduğu ekranı gizler(alt kısım)
mdashUSE HORIZONTAL LAYOUT editoumlruumlmuumlzdeki alttaki kısmı yanda goumlsterir
mdashSHOW PROGRAM COUNTER definition kısmındaki kodların toplu
goumlruumlnduumlğuuml ekranı getirir
mdashTOOLBAR
mdash TOOLBAR ON LEFT toolbarı solda goumlsterir mdash TOOLBAR ON RIGHT toolbarı sağda goumlsterir mdash TOOLBAR ON TOP toolbarı tepede goumlsterir mdash TOOLBAR ON HIDDEN toolbarı tamamen saklar mdashSHOW LĠNE NUMBERS sol tarafta satırlara sıra no verir
mdashSPLIT ekranın uumlst kısmını 2 ye ayırır(alt alta)
mdashCOLLAPSE ekranı eski haline getirir
LANGUAGE MENUumlSUuml
mdashCHOOSE LANGUAGE dil seccedilimi yapmayı sağlar Kullanıcı seviyesine goumlre dili seccediler Bazı
komutlar her dilde ccedilalıĢmamaktadır Oumlrnegin
BEGINNING STUDENT seccedilildiğinde Display komutu ccedilalıĢmaz
PRETTY BIG seccedilildiğinde ccedilalıĢır
RACKET MENUumlSUuml
mdashRUN programı ccedilalıĢtırır
mdashLIMIT MEMORY -unlimited
mdashlimited
Bu oumlzellikle varsayılan limit(128mb) olan bu hafızayı
değiĢtirebiliyoruz Boumlylece proje bize lazım olan hafıza kadar yer tutuyor
fazlasını tutmuyor
mdashCREATE EXECUTABLE Exe oluĢturmamızı sağlar
mdashCOMMENT OUT WĠTH A BOX kutu iccedilinde yorum satırı oluĢturmamızı
sağlar
mdashCOMMENT OUT WĠTH SEMĠCOLONS ( ) noktalı virguumll kullanarak yorum
satırı oluĢturmamızı sağlar
INSERT MENUumlSUuml
mdashINSERT COMMENT BOX kutu iccedilinde yorum satırı eklemeyi sağlar
mdashINSERT IMAGE resim eklenir
mdashINSERT FRACTION kesirli sayı oluĢturmak iccedilin kullanılır
mdashCHECK SYNTAX yazım hatalarını kontrol eder
mdashMACRO STEPPER kodu satır ccedilalıĢtırarak ilerler C taki F11 tuĢu gibi
ccedilalıĢır
Editoumlr uumlzerinde ise
Sağ alttaki ccedilarpı alt ekranı kapatmamızı sağlar
Sağ alt koumlĢedeki sayılar imlecin bulunduğu satır ve suumltunu goumlsterir
Sol altta seccediltiğimiz dil yazılıdır Uumlzerine tıkladığımızda daha oumlnceden
kullandığımız dillerin listesi goumlruumlnuumlr
DOSYA İŞLEMLERİ
Open-input-file Okunacak dosyayı accedilar
Open-output-file Yazılacak dosyayı accedilarDosya oumlnceden oluĢturulmamıĢsa oluĢturur
Close-input-port Input dosyasını kapatır
Close-output-port Output dosyasını kapatır
Read-char Dosyadan bir karakter okuduktan sonra imleci diğer karaktere taĢır Peek-char read-charlsquodan farkı imleci taĢımaz
Read-string Belirtilen sayı kadar karakter okur
Read-line Satır okur
Write Dosyaya string ifadeyi tırnak iĢaretleriyle birlikte yazar
Display Dosyaya string ifadeyi tırnak iĢaretleri olmadan yazar
Write-string Dosyaya string ifadeyi tırnak iĢaretleri olmadan yazar ayrıca karakter saysını
alt ekranda goumlsterir
With-input-from-file with-output-to-file Dosya accedilma kapatma iĢlemini otomatik yapıp
verilen proseduumlruuml uygular
Oumlrnek kodlar
Dosyadan okuma
Dosyada Scheme is fun
Write with Schemelsquo yazılıdır
(define p (open-input-file testtxt)) (read p)
(read-line p)
(read-string 300 p)
(close-input-port p) Ccedilıktısı Scheme is funr
Write with Scheme
----------------------
(with-input-from-file testtxt
(lambda ()
(read) ))
Ccedilıktısı Scheme
Dosyaya yazma
(define y merhaba)
(define p (open-output-file testtxt))
(write y p)
(display y p)
(write ifade p )
(write-char k p)
(close-output-port p)
-------------------------
(with-output-to-file test2txt
(lambda ()
(display Hello world) ))
---------------------------
KULLANICI ETKİLEŞİMİ
Bu dilde fonksiyonlar değiĢkenlere değer olarak atanan veya fonksiyonlara
delil olarak geccedilirilebilir Schemelsquode Scheme kodunu oluĢturan ve
yorumlanmasını(interpretation) isteyen bir fonksiyon tanımlamak muumlmkuumlnduumlr
Bu muumlmkuumlnduumlr ccediluumlnkuuml yorumlayıcı(interpreter) kullanıcı tarafından
eriĢilebilen(user-available) bir fonksiyondur Fonksiyonel dillerin tasarımı
Matematiksel Fonksiyonlara dayalıdır
Kullanıcıya da yakın olan sağlam bir teorik temel fakat nispeten programların
koĢacağı makinelerin mimarileriyle ilgisizdir
Schemelsquoi ayrıca diğer dillerden ayıra en oumlnemli oumlzelliklerden biri de ccedilalıĢma
esnasında uygulamaya muumldahale edebilme iznini vermesidir Bu oumlzellik
sadece oumlnceden derlenmiĢ ve ağır plug-inler aracılığı ile geniĢletilen
uygulamalara kıyasla ccedilok daha buumlyuumlk bir avantaj
FONKSİYONLAR
Bu dilde fonksiyonlar birinci-sınıf varlıklardır(entities)
ndashĠfadelerin(expressions) değerleri ve listelerin elemanları olabilirler
ndashDeğiĢkenlere(variables) atanabilirler ve parametrelere geccedililebilirler
Scheme dilindeki formlar ikiye ayrılır
Temel Formlar define lambda if quote unquote unquote-splicing
quasiquote define-syntax let-syntax letrec-syntax syntax-rules set
( 5 4) sonuccedil olarak karĢımıza ccedilikacaktir
Ifadesi de yorum satırı haline getirir kodu
Ġf deyimini oumlrnekle accedilıklayalım
(If lsaquo expr rsaquo lsaquoexpr rsaquo lsaquoexpr rsaquo)
(If (= (+ 4 5) 9) t f)
Burada ilk verdiğimiz arguumlman (= (+ 4 5) 9) iĢleminin doğru olup
olmadığına bakar Eğer iĢlem doğruysa ccedilıktı olarak t yanlıĢsa f doumlner
Anlayacağınız uumlzere bu oumlzel durum proseduumlruuml koĢul gerektiren bir proseduumlr
bu durumda ilk verdiğimiz arguumlman da koĢulu belirleyen parccedila oluyor Oumlnce
o koĢulu inceleyen yorumlayıcı da daha sonra verdiğimiz diğer arguumlmanları
koĢula goumlre seccedilerek bize gereken ccedilıktıyı veriyor
Cond deyimi( cond[ltİfadegt ltİfadegt] )
Bir soruya dayalı alternatif cevapları seccedilmek istiyorsanız cond ifadesi kullanılır
ġart ifadesidir
Cond Ģeklinde koumlĢeli parantez maddeler dizisi iccedilerir
(Cond
((ltSıcaklık 50) Soğuk)
((gt Sıcaklık 90) Ccedilok sıcak )
(else Sorun yok))
Ayrıca else Scheme dilinde cond ifadesiyle kullanılır diğer dillerde olduğu gibi if
le değil Else ifadesi ise diğer koĢullar olmadığında else koĢulu olacaktır
Do ifadesi
(do ((i 0 (+ i 1))) ((gt i 2)) (display i) (newline))
Programın ccedilıktısı
0
1
2 dir Ġlk oumlnce i ye 0 atıyor ve i yi 1 er 1 er artırarak i 2 den buumlyuumlk olana
kadar doumlnduumlruumlyor display ile de ekrana yazdırıyornewline satırı ilede bir alt
satıra geccediliyor
While ifadesi
(While (koĢul ))
(Deyim1)
(Deyim2)
)
Let ifadesi
(let ((x 5)) ( x 2))
Ekran ccedilıktısı ise 10 olurLet yanındaki ilk koĢul ifadesinde değer ataması
yapılır ve diğer ifadede de matematiksel iĢlemi gerccedilekleĢtirir
Listeler
List fonksiyonu herhangi bir sayı alır ve değerlerini iccedileren bir liste doumlnduumlruumlr
gt(listKırmızı YeĢil Mavi)
(Kırmızı yeĢilmavi)
gt(list 1 2 3 4 5)
(1 2 3 4 5)
LIST
ndash Herhangi bir sayıda parametre alır elemanları bu parametreler olan bir liste
doumlnduumlruumlr
Ayrıca Bizim listelerde bulmak iccedilin uğraĢtığımız problemler iccedilin direk
fonksiyonlar var Mesela
first listenin ilk elemanını alır
Rest listenin ilk elemanı haricindekileri alır
gt (first (list 1 2 3 ))
1
gt(rest (list 1 2 3 ))
2 3
Listeler iccedilin bir oumlrnek daha
gt( list ( list 1 2 3 ) 5 (list a b c) )
((1 2 3) 5 (a b c))
Hello World Uygulaması
Programlamaya ilk baslayan herkesin yaptığı gibi bizde scheme dilinde
ekrana ―hello world yazdiralimScheme dilinde farkli seviyelerde farklı kodlar
kullanilirPretty Big de hemen hemen buumltuumln kodlar ccedilalıĢtığı iccedilin biz genelde bu
level ı kullaniyoruz
Display ―Hello World
(write Hello World )
―Hello World
Yukarı da goumlruumllen kodlar ccedilalıĢtırıldığında aynı ekran ccedilıktısına sahip
olurlarGoumlruumllduumlğuuml gibi ne noktalı virguumll nede fazla kelimeye gerek kalmıyor
Matematik Fonksiyonları
(Exp x) e^x in sonucunu doumlnduumlruumlr
(Log x) x sayısının logaritma değerini doumlnduumlruumlr
(sqrt x) x koumlkuumlnuumln karesini doumlnduumlruumlr
(max x1 x2) verilen listeden en buumlyuumlk sayıyı doumlnduumlruumlr
(min x1 x2) verilen listeden en kuku sayıyı doumlnduumlruumlr
(quotient x1 x2) x1x2 kesrinin boumlluumlmuumlnuuml doumlnduumlruumlr
(remian x1 x2) x1x2 kesrinin kalanini doumlnduumlruumlr
(modula x1 x2) x1 in x2 ye moduumlluuml sonucunu doumlnduumlruumlr
(gcm num1 num2 ) Verilen listenin en buumlyuumlk ortak boumlleni doumlnduumlruumlr
(lcm num1 num2 ) Verilen listenin en kuku ortak ccedilarpanı doumlnduumlruumlr
(Ceiling x) x ten kuku olmayan en kuku değeri doumlnduumlruumlr
( turn cate x) Mutlak değeri x in mutlak değerinden buumlyuumlk olmayan Xlsquo en
yakın değeri doumlnduumlruumlr
(round x) xe en yakın değere yuvarlıyor
İlişkisel Operatoumlrler
(=x 1) x 1 ise true doumlnduumlruumlr
(ltx y) x yden kuumlccediluumlkse true doumlnduumlruumlr
(gtx y) x y den buumlyuumlkse true doumlnduumlruumlr
(lt=x y) x yden kuku veya eĢitse true doumlnduumlruumlr
(gt=x y) x yden buumlyuumlk veya eĢitse true doumlnduumlruumlr
(eq x y) x ve y aynı ise true doumlnduumlruumlr
(equal x y) x ve y aynı yapıda olup aynı iccedileriğe sahipse true doumlnduumlruumlr
Tip Yuumlklemeleri
(procedure x)X fonksiyon ise true doumlnduumlruumlr
(null x) X boĢ bir liste ise true doumlnduumlruumlr
(zero x )X sıfır ise true doumlnduumlruumlr
(odd x) X tek ise true doumlnduumlruumlr
(even x) X tek ise true doumlnduumlruumlr
(symbolx) X tek ise true doumlnduumlruumlr
Asal Sayı Bulma Programı
(Define (divides m n)
(Cond
[(zero m) true]
[(amplt m n) false]
[else (divides (- m n) n)]
))
(Define (check-prime prime-cand divisor)
(cond
[(= 1 divisor) true]
[(divides prime-cand divisor) false]
[else (check-prime prime-cand (sub1 divisor))]))
(define (prime x)
(cond
[(= x 0) false]
[(= x 1) false]
[else (check-prime x (- x 1))]
))
KAYNAKLAR
wwwbilgisayarkavramlaricom
httpe-bergicom2010OcakScheme
httpwwwhtdporg2003ndash09ndash26Bookcurriculum-Z-H-1html
httptranslategooglecomtrtranslatehl=tramplangpair=en7Ctrampu=http httpprogramming-musingsorg20091223scheme-lectures-mostly httptranslategooglecomtrtranslatehl=trampsl=enampu=http3A2F2Fw
httpblogyollucomtagscheme
httpwwwschemecomtspl4 httpracket-langorgdownload
PROJE KONUSU SCHEME DİLİNİN OZELİKLERİNİ TAŞIYAN VE BU PDF DE
ANLATILAN KONULAR İLGİLİ 10 SORU HAZIRLANIP BUNLARIN CEVAPLARINI
KULANICIDAN İSTENİLMESİ
PROJEDE KULANILANLAR
LİSTE
FONKSİYON
KOŞUL CUumlMLESİ
DEĞER ATAMALARI
PROJE KODU
(define k 0)
(define doğrular 0)
(define yanlışlar 0)
sorular
(define a 1soru Lamda nedir)
(define A1 1 isimsiz fonksiyonları belirler)
(define B1 2 değer ataması yapar)
(define C1 3 pointer goumlrevi yapar)
(define b 2soru hangisi aritmetik fonksiyon değildir)
(define A2 1 SQRT )
(define B2 2 MIN )
(define C2 3 QUOTE )
(define c 3soru=list kulanımı nasıldır)
(define A3 (1 LIST (A) (B) (C) (D)))
(define B3 (2 LIST A B C D) )
(define C3 (3 LIST A B C D) )
(define d 4soru=equalsimp ne demek)
(define A4 1 iki basit liste alır ve eşitliğini kontrol eder)
(define B4 2 listeleri birbirine atar)
(define C4 3 listeleri eşitler)
(define e1 5soru=append ne işe yarar)
(define A5 1 İki listeyi peş peşe ekler)
(define B5 2 iki listeyi ccedilıkarır)
(define C5 3 iki listeyi ccedilarpar)
(define f 6soru set isimlere değer atar doğrumudur)
(define A6 1 doğru)
(define B6 2 yanlis)
doğru cevap listesi
(define DListe (list 1 1 1 2 3 1) )
şıkları yazdırma
(define (Cevaplar cevapListesi)
( cond [(null cevapListesi) 0]
[else (Cevaplar (rest cevapListesi))
(display (first cevapListesi))
(display n)
]))
doğru yanlış kontroluuml
(define kon
(lambda (k FDL)
(cond ((= k FDL) (display Tebrikler )nn)(set dogrular (+ 1 dogrular)))
else ( display Maalesef olmadı (nn)(set yanlislar (+ 1 yanlislar))])))
soru ve şıkları yazdırıp cevap kontroluumlnuuml ccedilağırma
(define (Sorular soruListesi cevpListesi DListesi )
( cond [(null soruListesi) 0]
[else
(Sorular (rest soruListesi) (rest cevpListesi) (rest DListesi ))
(display (first soruListesi))
(display n)
(Cevaplar (first cevpListesi)) (set k (read)) (kon k (first DListesi)) ]))
şık listesi
(define CListe (list(list B6 A6) (list C5 B5 A5) (list C4 B4 A4) (list C3 B3 A3) (list C2 B2
A2)(list C1 B1 A1)))
Sorular fonksiyonunu ccedilağırma
(Sorular (list f e1 d c b a) CListe DListe )
yapılan doğru ve yanlış sayısını goumlsterme
(display Doğru cevap sayısı )
dogrular
(display Yanlış cevap sayısı )
yanlislar
EMEĞİ GECcedilEN BUumlTUumlN HERKESE TEŞEKUumlRLERİMİZİ SUNUYORUZhellip
ve pek uumlretken olmayan bir youmlntemdir fakat temel algoritmik kavramların anlaĢılmasını kolaylaĢtırdığından tercih edilir
Scheme aynı zamanda ccedileĢitli derleyicilere (Chicken Stalin Chez Ikarus gibi) de sahiptir
Bunun dıĢında Scheme birccedilok paradigmayı iccedilinde barındıran bir programlama dilidir(fonksiyonel programlama baĢta olmak uumlzere)
EĢzamanlı hesaplama dilinin bazı oumlzelliklerini de taĢımaktadır
Scheme yorumlayıcısı (interpreter) eĢzamanlaĢıcısı (synchronizers) ve değiĢken huumlcreleri iccedilin gereken temel oumlzellikleri iccedilinde barındırmamaktadır
Scheme bir paralel programlama dili olmasa da taĢıdığı oumlzelliklerle tam olarak bir fonksiyonel programlama dilidir
Ayrıca Scheme buyurgan bir youmlne de sahiptir ama bu dili gerek akademik duumlnyada gerekse sektoumlrde oumlne ccedilıkaran ve tercih edilmesine sebep olan youmlnuuml fonksiyonel paradigmaya olan uygunluğudur
Ccedilok az sayıda programlama kuralıyla anlatımlar oluĢturulmasını sağlar
Pratik ve yalın yapısıyla guumlnuumlmuumlzde var olan pek ccedilok programlama kavramını destekler
Lisp lehccedilesidir
Genelde hızlı olmasını yapay zekacirc iĢlerinde kullanılmasında yardımcı olur
Dikkat ccedileken bir dil guumlzel sevimli ama akademik ortamlar dıĢında pratik bir kullanımı yoktur
Temel ilgi yazılım geliĢtirmeye uygunluktan ccedilok verimliliktir
Sadece statik kapsam kullanır
Dinamik olarak tuumlr belirtilen bir fonksiyonel programlama dilidir
Sembolik bir programlama dilidir
Programlama ortamı olarak Drscheme programı kullanmaktadır
DrScheme Scheme programlama dili iccedilin grafiksel bir ortam sunmaktadır
BU DİL NEDEN EĞİTİM DİLİ OLARAK VERİLMELİDİR
BaĢlangıccedil duumlzeydeki bir oumlğrenciyi ele alırsak ona imperative bir dil
oumlğretmeye kalkarsak mesela (basic veya pascal ) oumlğrencinin soyut
duumlĢuumlnmesini kısıtlarız
Ccediluumlnkuuml oumlğrenci problemin ccediloumlzuumlmuumlnuuml duumlĢuumlk soyutlama dilinde ifade
etmede zorlanıyor Aynı durum mantıksal diller iccedilinde geccedilerlidir (prolog)
amacımız baĢlangıccedil seviyesinde olan oumlğrenciye soyut fakat yordamsal
duumlĢuumlnme yeteneğini oumlğretmek Buna uygun olarak fonksiyonel bir dil olabilir
Fonksiyonel dilin yapısı oumlğrencinin matematik bilgisine dayanır mesela liseden
fonksiyonları kuumlme dizi ve mantık kavramların bilinmesi gibi Boumlylece oumlğrenci
elinde olan problemi ccediloumlzmek iccedilin ve bunu bilgisayara aktarmanın en iyi yolu
fonksiyonel bir dil seccedilimidir
Fonksiyonel olarak Scheme dilinin seccedililmesinin oumlnemli nedenleri vardır
1 Dil iĢlemcisini lisans sorunu olmadan bulmak
2 Basit soumlz dizimin olması yani dilin yazım kuralarını zahmetsizce oumlğrenilebilir
3 Veri tipi sadeliği ve dinamik olarak denetlenmesi bu maddeyi accedilıklarsak
oumlğrenci tamsayı reel sayı ayırımını oumlğrenip değiĢkenlerini buna goumlre
tanımlamak zorunda kalmayacak boumlylece oumlğrenci buumltuumln dikkatini problemin
ccediloumlzuumlmuumlne odaklayacak yazım kurallarıyla uğraĢmayacak
4Yorumlayıcı ve etkileĢimli olarak ccedilalıĢma ortamı geri bildirimi
hızlandırdığından oumlğrenme suumlresini hızlandırıyor
5bunları kullanarak dili zorlaĢtıracak ayrıntılara boğulmadan problemleri
ccediloumlzebilecektir
TARİHİ GELİŞİMİ
Scheme 1970 yılı ortalarında MIT profesoumlrleri Guy Lewis Steele ve Gerald Jay Sussman tarafından geliĢtirilmiĢ fonksiyonel bir dildir
BaĢlangıccedilta Sussman ve Hewitt birlikte MDL(MIT Design Language) uumlzerinde bir ccedilalıĢma yaptılar ( MDL Carl Hewittin Planner adlı projesi iccedilin geniĢletilmiĢ bir LISP diyalektidir )
1971 yılında Sussman ve bir grup Profesoumlr Micro-plannerı geliĢtirdiler
Ardından Conniver adında yine LISP tabanlı bir programlama dili geliĢtirdiler( ama bu ccedilalıĢmaların sonuccedillarını pek uumlretken bulamadılar ve farklı yollara youmlneldiler Steele oumlğrenimi suumlresinde dıĢarıdaki geliĢmeleri duumlzenli olarak takip ediyordu
Steele mezun olmasının ardından Sussman ile birlikte MacLisp programlama dilini kullanarak kendilerine ait LISPlerini geliĢtirdi
Daha sonra bu mekanizmayı geliĢtirerek kendi modellerini actor oluĢturabilecek ve mesaj goumlnderebilecek duumlzeye getirmeyi baĢardılar
GeliĢtirdikleri modelleme ccedilalıĢmaları iyiye gidince bu modele Schemer adını verdiler ama daha sonra ana sistem uumlzerine kurulmuĢ ITS dosya sisteminin 6 karakter limitine uymak iccedilin adını Scheme olarak değiĢtirdiler
1973 yılında MIT profesoumlrlerinden Carl Hewitt eĢzamanlı hesaplamada actor model adında matematiksel bir model geliĢtirdi
Sussman ve Steele bu modele daha iyi bir anlam kazandırmak amacıyla Scheme programlama dilini oluĢturdular
Sussman ve Steelein ccedilalıĢmalarıyla kuumlccediluumlk ve yeterli bir LISP diyalekti ortaya ccedilıkmıĢ oldu
1980 den beri geliĢtirilmiyor
IEEE tarafından 1978ndash1990 ile standartlaĢtırılmıĢtır
ġu anda R6RS (Revised6 Report on the Algorithmic Language Scheme) en son kabul edilen rapordur
MITlsquo de lisans oumlğrencilerine ilk programlama dersi olarak verilmekteydi
MIT profesoumlrlerinden Harold Abelson ve Gerald Jay Sussman tarafından yazılmıĢ ve ilk baskısı 1984 yılında oluĢturulmuĢ
Structure ve Interpretation of Computer Programs kitabı derslerde kullanılmaktadır Orta Doğu Teknik Uumlniversitesinde de boumlluumlme giren oumlğrenciler programlama duumlnyasındaki ilk adımlarını Scheme programlama dilini oumlğrenerek baĢlamaktadır
Ders kitabı olarak zamanın MIT profesoumlrlerinden Biran Harvey(UC Berkeley) ve Matthew Wright tarafından yazılmıĢ Simply Scheme adlı kitap kullanılmaktadır
KISACA
1 Ġlk ccedilıkıĢı 1975 2 TASARIMCISI Guy L Steele ve Gerald Jay Sussman 3 SUumlRUumlMUumlR6RS (onaylı standart) (2007) 4 TIP SĠSTEMĠ guumlccedilluuml dinamik
5 ETKĠLENDĠKLERI DĠL Lisp ALGOL MDL 6 ETKILEDIĞI DIL Common Lisp EuLisp JavaScript R Ruby Dylan
Lua Hop Racket 7 DOSYA UZANTISIscm ss 8 PARADĠKMASI fonksiyonel meta yordamsal
Scheme dili fonksiyonel bir dildir
Nesneye dair hiccedil bir Ģey yoktur Yorumlayıcı tarafından yorumlanan
fonksiyonel bir dildir
Yani programlar matematiksel fonksiyonlar tarafından yapılır
Fonksiyonların aldıkları girdi ve ccedilıktı sabittir
Programa girilen değere goumlre fonksiyonda bir değiĢiklik yapmadan
fonksiyonu aynen uygular Atama deyimleri bulunmaz
DeğiĢken değerleri bir defa atanır ve bir daha değiĢmez Fonksiyonel
programların artılarından biri bir fonksiyonu ccedilağırmanın kendi sonucunu
geriye doumlnduumlrmekten baĢka bir sonucu olmadığından bug oluĢumunu
engeller
EDİTOumlR KURULUMU
Bu linkten ldquo httpracket-langorgdownload ldquo editoumlruuml indirilebilir
Next diyoruz
Next diyoruz
Install diyoruz
Bu boumlluumlm bittikten sonra editoumlruumlmuumlzuumln kurulumu tamamlanmış olacaktır
EDİTOumlR TANITIMI
FILE MENUumlSUuml
mdashNEW yeni sayfa accedilar
mdashNEW TAB yeni bir sekme accedilar
mdashOPEN oumlnceden yapılmıĢ dosyayı accedilar
mdashOPEN RECENT en son accedilılmıĢ olan sayfayı accedilar
mdashINSTALL PLT FILE buna tıkladığımızda WEB ve FILE diye 2 kısım
karsımıza ccedilıkar
WEB de web den dosya yuumlklemek iccedilin (URL) giriyoruz
FILE da ise bilgisayarda bulunan herhangi bir DrScheme projesini accedilmak
iccedilin kullanıyoruz
mdashREVERT projeyi en son derlenmiĢ haline doumlnduumlruumlr Yani derlendikten
sonraki değiĢiklikleri siler
mdashSAVE DEFINITIONS projeyi kaydeder
mdash SAVE DEFINITIONS AS projeyi farklı isimde kaydetmek iccedilin kullanılır
mdashPRINT DEFINITIONS projeyi yazıcıdan ccedilıkarmak iccedilin kullanılır
mdashPRINT INTERACTION projenin ccedilıktısını yazıcıdan ccedilıkarmak iccedilin kullanılır
EDIT MENUumlSUuml
mdashUNDO (ctrl+z) geri alma goumlrevini yapar
mdashREDO (ctrl+y) ileri alma goumlrevini yapar
mdashOVERWRITE MODE C dilindeki INSERT gibi yeni harfi eski harfin uumlzerine
yazar Bir ya da birkaccedil harfi değiĢtirir(Biz uumlzerine gelip tıkladıktan sonra
yazarken değiĢtirir)
mdashWRAP TEXT kod satırları uzadığında kodlar otomatik alt satıra geccediler
mdashFIND ekranda yazılanları değiĢtirmek iccedilin kullanılır FIND a tıkladığımızda alt
kısımda ccedilıkan alana değiĢtirmek istediğimiz yeni değeri yazdığımızda editoumlr
bulduğu kelimeleri yuvarlak iccediline alınır
mdashREPLACE değiĢtirmek istenen yeri yazıyoruz(Ccedilıkan iki kutudan birine nereyi
değiĢtireceğimizi diğerine neyle değiĢtireceğimizi yazarız)
mdashHĠDE REPLACE atadığımız yeni değeri gizler
mdashKEY BINDING anahtar kelimeler
mdashPREFERENCES buradan oumlzellikleri ayarlıyoruz Oumlrneğin
FONT SĠZE yazının buumlyuumlkluumlğuumlnuuml
FONT NAME yazının ismini
COLORS da Background Color arka plan rengini ayarlar
SCHEME symbol keyword string vb yazının rengi tipi koyuluğunu
değiĢtirmek iccedilin kullanılır
FIND CASE SENSTĠVE kuumlccediluumlk buumlyuumlk harfe duyarlı olup olmadığını
goumlsterir Ġstersek ayarlayabiliriz
VIEW MENUumlSUuml
mdashHIDE DEFINITION kodların yazıldığı ekranı gizler(uumlst kısım)
mdashHIDE INTERACTION ccedilıktıların yazılı olduğu ekranı gizler(alt kısım)
mdashUSE HORIZONTAL LAYOUT editoumlruumlmuumlzdeki alttaki kısmı yanda goumlsterir
mdashSHOW PROGRAM COUNTER definition kısmındaki kodların toplu
goumlruumlnduumlğuuml ekranı getirir
mdashTOOLBAR
mdash TOOLBAR ON LEFT toolbarı solda goumlsterir mdash TOOLBAR ON RIGHT toolbarı sağda goumlsterir mdash TOOLBAR ON TOP toolbarı tepede goumlsterir mdash TOOLBAR ON HIDDEN toolbarı tamamen saklar mdashSHOW LĠNE NUMBERS sol tarafta satırlara sıra no verir
mdashSPLIT ekranın uumlst kısmını 2 ye ayırır(alt alta)
mdashCOLLAPSE ekranı eski haline getirir
LANGUAGE MENUumlSUuml
mdashCHOOSE LANGUAGE dil seccedilimi yapmayı sağlar Kullanıcı seviyesine goumlre dili seccediler Bazı
komutlar her dilde ccedilalıĢmamaktadır Oumlrnegin
BEGINNING STUDENT seccedilildiğinde Display komutu ccedilalıĢmaz
PRETTY BIG seccedilildiğinde ccedilalıĢır
RACKET MENUumlSUuml
mdashRUN programı ccedilalıĢtırır
mdashLIMIT MEMORY -unlimited
mdashlimited
Bu oumlzellikle varsayılan limit(128mb) olan bu hafızayı
değiĢtirebiliyoruz Boumlylece proje bize lazım olan hafıza kadar yer tutuyor
fazlasını tutmuyor
mdashCREATE EXECUTABLE Exe oluĢturmamızı sağlar
mdashCOMMENT OUT WĠTH A BOX kutu iccedilinde yorum satırı oluĢturmamızı
sağlar
mdashCOMMENT OUT WĠTH SEMĠCOLONS ( ) noktalı virguumll kullanarak yorum
satırı oluĢturmamızı sağlar
INSERT MENUumlSUuml
mdashINSERT COMMENT BOX kutu iccedilinde yorum satırı eklemeyi sağlar
mdashINSERT IMAGE resim eklenir
mdashINSERT FRACTION kesirli sayı oluĢturmak iccedilin kullanılır
mdashCHECK SYNTAX yazım hatalarını kontrol eder
mdashMACRO STEPPER kodu satır ccedilalıĢtırarak ilerler C taki F11 tuĢu gibi
ccedilalıĢır
Editoumlr uumlzerinde ise
Sağ alttaki ccedilarpı alt ekranı kapatmamızı sağlar
Sağ alt koumlĢedeki sayılar imlecin bulunduğu satır ve suumltunu goumlsterir
Sol altta seccediltiğimiz dil yazılıdır Uumlzerine tıkladığımızda daha oumlnceden
kullandığımız dillerin listesi goumlruumlnuumlr
DOSYA İŞLEMLERİ
Open-input-file Okunacak dosyayı accedilar
Open-output-file Yazılacak dosyayı accedilarDosya oumlnceden oluĢturulmamıĢsa oluĢturur
Close-input-port Input dosyasını kapatır
Close-output-port Output dosyasını kapatır
Read-char Dosyadan bir karakter okuduktan sonra imleci diğer karaktere taĢır Peek-char read-charlsquodan farkı imleci taĢımaz
Read-string Belirtilen sayı kadar karakter okur
Read-line Satır okur
Write Dosyaya string ifadeyi tırnak iĢaretleriyle birlikte yazar
Display Dosyaya string ifadeyi tırnak iĢaretleri olmadan yazar
Write-string Dosyaya string ifadeyi tırnak iĢaretleri olmadan yazar ayrıca karakter saysını
alt ekranda goumlsterir
With-input-from-file with-output-to-file Dosya accedilma kapatma iĢlemini otomatik yapıp
verilen proseduumlruuml uygular
Oumlrnek kodlar
Dosyadan okuma
Dosyada Scheme is fun
Write with Schemelsquo yazılıdır
(define p (open-input-file testtxt)) (read p)
(read-line p)
(read-string 300 p)
(close-input-port p) Ccedilıktısı Scheme is funr
Write with Scheme
----------------------
(with-input-from-file testtxt
(lambda ()
(read) ))
Ccedilıktısı Scheme
Dosyaya yazma
(define y merhaba)
(define p (open-output-file testtxt))
(write y p)
(display y p)
(write ifade p )
(write-char k p)
(close-output-port p)
-------------------------
(with-output-to-file test2txt
(lambda ()
(display Hello world) ))
---------------------------
KULLANICI ETKİLEŞİMİ
Bu dilde fonksiyonlar değiĢkenlere değer olarak atanan veya fonksiyonlara
delil olarak geccedilirilebilir Schemelsquode Scheme kodunu oluĢturan ve
yorumlanmasını(interpretation) isteyen bir fonksiyon tanımlamak muumlmkuumlnduumlr
Bu muumlmkuumlnduumlr ccediluumlnkuuml yorumlayıcı(interpreter) kullanıcı tarafından
eriĢilebilen(user-available) bir fonksiyondur Fonksiyonel dillerin tasarımı
Matematiksel Fonksiyonlara dayalıdır
Kullanıcıya da yakın olan sağlam bir teorik temel fakat nispeten programların
koĢacağı makinelerin mimarileriyle ilgisizdir
Schemelsquoi ayrıca diğer dillerden ayıra en oumlnemli oumlzelliklerden biri de ccedilalıĢma
esnasında uygulamaya muumldahale edebilme iznini vermesidir Bu oumlzellik
sadece oumlnceden derlenmiĢ ve ağır plug-inler aracılığı ile geniĢletilen
uygulamalara kıyasla ccedilok daha buumlyuumlk bir avantaj
FONKSİYONLAR
Bu dilde fonksiyonlar birinci-sınıf varlıklardır(entities)
ndashĠfadelerin(expressions) değerleri ve listelerin elemanları olabilirler
ndashDeğiĢkenlere(variables) atanabilirler ve parametrelere geccedililebilirler
Scheme dilindeki formlar ikiye ayrılır
Temel Formlar define lambda if quote unquote unquote-splicing
quasiquote define-syntax let-syntax letrec-syntax syntax-rules set
( 5 4) sonuccedil olarak karĢımıza ccedilikacaktir
Ifadesi de yorum satırı haline getirir kodu
Ġf deyimini oumlrnekle accedilıklayalım
(If lsaquo expr rsaquo lsaquoexpr rsaquo lsaquoexpr rsaquo)
(If (= (+ 4 5) 9) t f)
Burada ilk verdiğimiz arguumlman (= (+ 4 5) 9) iĢleminin doğru olup
olmadığına bakar Eğer iĢlem doğruysa ccedilıktı olarak t yanlıĢsa f doumlner
Anlayacağınız uumlzere bu oumlzel durum proseduumlruuml koĢul gerektiren bir proseduumlr
bu durumda ilk verdiğimiz arguumlman da koĢulu belirleyen parccedila oluyor Oumlnce
o koĢulu inceleyen yorumlayıcı da daha sonra verdiğimiz diğer arguumlmanları
koĢula goumlre seccedilerek bize gereken ccedilıktıyı veriyor
Cond deyimi( cond[ltİfadegt ltİfadegt] )
Bir soruya dayalı alternatif cevapları seccedilmek istiyorsanız cond ifadesi kullanılır
ġart ifadesidir
Cond Ģeklinde koumlĢeli parantez maddeler dizisi iccedilerir
(Cond
((ltSıcaklık 50) Soğuk)
((gt Sıcaklık 90) Ccedilok sıcak )
(else Sorun yok))
Ayrıca else Scheme dilinde cond ifadesiyle kullanılır diğer dillerde olduğu gibi if
le değil Else ifadesi ise diğer koĢullar olmadığında else koĢulu olacaktır
Do ifadesi
(do ((i 0 (+ i 1))) ((gt i 2)) (display i) (newline))
Programın ccedilıktısı
0
1
2 dir Ġlk oumlnce i ye 0 atıyor ve i yi 1 er 1 er artırarak i 2 den buumlyuumlk olana
kadar doumlnduumlruumlyor display ile de ekrana yazdırıyornewline satırı ilede bir alt
satıra geccediliyor
While ifadesi
(While (koĢul ))
(Deyim1)
(Deyim2)
)
Let ifadesi
(let ((x 5)) ( x 2))
Ekran ccedilıktısı ise 10 olurLet yanındaki ilk koĢul ifadesinde değer ataması
yapılır ve diğer ifadede de matematiksel iĢlemi gerccedilekleĢtirir
Listeler
List fonksiyonu herhangi bir sayı alır ve değerlerini iccedileren bir liste doumlnduumlruumlr
gt(listKırmızı YeĢil Mavi)
(Kırmızı yeĢilmavi)
gt(list 1 2 3 4 5)
(1 2 3 4 5)
LIST
ndash Herhangi bir sayıda parametre alır elemanları bu parametreler olan bir liste
doumlnduumlruumlr
Ayrıca Bizim listelerde bulmak iccedilin uğraĢtığımız problemler iccedilin direk
fonksiyonlar var Mesela
first listenin ilk elemanını alır
Rest listenin ilk elemanı haricindekileri alır
gt (first (list 1 2 3 ))
1
gt(rest (list 1 2 3 ))
2 3
Listeler iccedilin bir oumlrnek daha
gt( list ( list 1 2 3 ) 5 (list a b c) )
((1 2 3) 5 (a b c))
Hello World Uygulaması
Programlamaya ilk baslayan herkesin yaptığı gibi bizde scheme dilinde
ekrana ―hello world yazdiralimScheme dilinde farkli seviyelerde farklı kodlar
kullanilirPretty Big de hemen hemen buumltuumln kodlar ccedilalıĢtığı iccedilin biz genelde bu
level ı kullaniyoruz
Display ―Hello World
(write Hello World )
―Hello World
Yukarı da goumlruumllen kodlar ccedilalıĢtırıldığında aynı ekran ccedilıktısına sahip
olurlarGoumlruumllduumlğuuml gibi ne noktalı virguumll nede fazla kelimeye gerek kalmıyor
Matematik Fonksiyonları
(Exp x) e^x in sonucunu doumlnduumlruumlr
(Log x) x sayısının logaritma değerini doumlnduumlruumlr
(sqrt x) x koumlkuumlnuumln karesini doumlnduumlruumlr
(max x1 x2) verilen listeden en buumlyuumlk sayıyı doumlnduumlruumlr
(min x1 x2) verilen listeden en kuku sayıyı doumlnduumlruumlr
(quotient x1 x2) x1x2 kesrinin boumlluumlmuumlnuuml doumlnduumlruumlr
(remian x1 x2) x1x2 kesrinin kalanini doumlnduumlruumlr
(modula x1 x2) x1 in x2 ye moduumlluuml sonucunu doumlnduumlruumlr
(gcm num1 num2 ) Verilen listenin en buumlyuumlk ortak boumlleni doumlnduumlruumlr
(lcm num1 num2 ) Verilen listenin en kuku ortak ccedilarpanı doumlnduumlruumlr
(Ceiling x) x ten kuku olmayan en kuku değeri doumlnduumlruumlr
( turn cate x) Mutlak değeri x in mutlak değerinden buumlyuumlk olmayan Xlsquo en
yakın değeri doumlnduumlruumlr
(round x) xe en yakın değere yuvarlıyor
İlişkisel Operatoumlrler
(=x 1) x 1 ise true doumlnduumlruumlr
(ltx y) x yden kuumlccediluumlkse true doumlnduumlruumlr
(gtx y) x y den buumlyuumlkse true doumlnduumlruumlr
(lt=x y) x yden kuku veya eĢitse true doumlnduumlruumlr
(gt=x y) x yden buumlyuumlk veya eĢitse true doumlnduumlruumlr
(eq x y) x ve y aynı ise true doumlnduumlruumlr
(equal x y) x ve y aynı yapıda olup aynı iccedileriğe sahipse true doumlnduumlruumlr
Tip Yuumlklemeleri
(procedure x)X fonksiyon ise true doumlnduumlruumlr
(null x) X boĢ bir liste ise true doumlnduumlruumlr
(zero x )X sıfır ise true doumlnduumlruumlr
(odd x) X tek ise true doumlnduumlruumlr
(even x) X tek ise true doumlnduumlruumlr
(symbolx) X tek ise true doumlnduumlruumlr
Asal Sayı Bulma Programı
(Define (divides m n)
(Cond
[(zero m) true]
[(amplt m n) false]
[else (divides (- m n) n)]
))
(Define (check-prime prime-cand divisor)
(cond
[(= 1 divisor) true]
[(divides prime-cand divisor) false]
[else (check-prime prime-cand (sub1 divisor))]))
(define (prime x)
(cond
[(= x 0) false]
[(= x 1) false]
[else (check-prime x (- x 1))]
))
KAYNAKLAR
wwwbilgisayarkavramlaricom
httpe-bergicom2010OcakScheme
httpwwwhtdporg2003ndash09ndash26Bookcurriculum-Z-H-1html
httptranslategooglecomtrtranslatehl=tramplangpair=en7Ctrampu=http httpprogramming-musingsorg20091223scheme-lectures-mostly httptranslategooglecomtrtranslatehl=trampsl=enampu=http3A2F2Fw
httpblogyollucomtagscheme
httpwwwschemecomtspl4 httpracket-langorgdownload
PROJE KONUSU SCHEME DİLİNİN OZELİKLERİNİ TAŞIYAN VE BU PDF DE
ANLATILAN KONULAR İLGİLİ 10 SORU HAZIRLANIP BUNLARIN CEVAPLARINI
KULANICIDAN İSTENİLMESİ
PROJEDE KULANILANLAR
LİSTE
FONKSİYON
KOŞUL CUumlMLESİ
DEĞER ATAMALARI
PROJE KODU
(define k 0)
(define doğrular 0)
(define yanlışlar 0)
sorular
(define a 1soru Lamda nedir)
(define A1 1 isimsiz fonksiyonları belirler)
(define B1 2 değer ataması yapar)
(define C1 3 pointer goumlrevi yapar)
(define b 2soru hangisi aritmetik fonksiyon değildir)
(define A2 1 SQRT )
(define B2 2 MIN )
(define C2 3 QUOTE )
(define c 3soru=list kulanımı nasıldır)
(define A3 (1 LIST (A) (B) (C) (D)))
(define B3 (2 LIST A B C D) )
(define C3 (3 LIST A B C D) )
(define d 4soru=equalsimp ne demek)
(define A4 1 iki basit liste alır ve eşitliğini kontrol eder)
(define B4 2 listeleri birbirine atar)
(define C4 3 listeleri eşitler)
(define e1 5soru=append ne işe yarar)
(define A5 1 İki listeyi peş peşe ekler)
(define B5 2 iki listeyi ccedilıkarır)
(define C5 3 iki listeyi ccedilarpar)
(define f 6soru set isimlere değer atar doğrumudur)
(define A6 1 doğru)
(define B6 2 yanlis)
doğru cevap listesi
(define DListe (list 1 1 1 2 3 1) )
şıkları yazdırma
(define (Cevaplar cevapListesi)
( cond [(null cevapListesi) 0]
[else (Cevaplar (rest cevapListesi))
(display (first cevapListesi))
(display n)
]))
doğru yanlış kontroluuml
(define kon
(lambda (k FDL)
(cond ((= k FDL) (display Tebrikler )nn)(set dogrular (+ 1 dogrular)))
else ( display Maalesef olmadı (nn)(set yanlislar (+ 1 yanlislar))])))
soru ve şıkları yazdırıp cevap kontroluumlnuuml ccedilağırma
(define (Sorular soruListesi cevpListesi DListesi )
( cond [(null soruListesi) 0]
[else
(Sorular (rest soruListesi) (rest cevpListesi) (rest DListesi ))
(display (first soruListesi))
(display n)
(Cevaplar (first cevpListesi)) (set k (read)) (kon k (first DListesi)) ]))
şık listesi
(define CListe (list(list B6 A6) (list C5 B5 A5) (list C4 B4 A4) (list C3 B3 A3) (list C2 B2
A2)(list C1 B1 A1)))
Sorular fonksiyonunu ccedilağırma
(Sorular (list f e1 d c b a) CListe DListe )
yapılan doğru ve yanlış sayısını goumlsterme
(display Doğru cevap sayısı )
dogrular
(display Yanlış cevap sayısı )
yanlislar
EMEĞİ GECcedilEN BUumlTUumlN HERKESE TEŞEKUumlRLERİMİZİ SUNUYORUZhellip
Ccediluumlnkuuml oumlğrenci problemin ccediloumlzuumlmuumlnuuml duumlĢuumlk soyutlama dilinde ifade
etmede zorlanıyor Aynı durum mantıksal diller iccedilinde geccedilerlidir (prolog)
amacımız baĢlangıccedil seviyesinde olan oumlğrenciye soyut fakat yordamsal
duumlĢuumlnme yeteneğini oumlğretmek Buna uygun olarak fonksiyonel bir dil olabilir
Fonksiyonel dilin yapısı oumlğrencinin matematik bilgisine dayanır mesela liseden
fonksiyonları kuumlme dizi ve mantık kavramların bilinmesi gibi Boumlylece oumlğrenci
elinde olan problemi ccediloumlzmek iccedilin ve bunu bilgisayara aktarmanın en iyi yolu
fonksiyonel bir dil seccedilimidir
Fonksiyonel olarak Scheme dilinin seccedililmesinin oumlnemli nedenleri vardır
1 Dil iĢlemcisini lisans sorunu olmadan bulmak
2 Basit soumlz dizimin olması yani dilin yazım kuralarını zahmetsizce oumlğrenilebilir
3 Veri tipi sadeliği ve dinamik olarak denetlenmesi bu maddeyi accedilıklarsak
oumlğrenci tamsayı reel sayı ayırımını oumlğrenip değiĢkenlerini buna goumlre
tanımlamak zorunda kalmayacak boumlylece oumlğrenci buumltuumln dikkatini problemin
ccediloumlzuumlmuumlne odaklayacak yazım kurallarıyla uğraĢmayacak
4Yorumlayıcı ve etkileĢimli olarak ccedilalıĢma ortamı geri bildirimi
hızlandırdığından oumlğrenme suumlresini hızlandırıyor
5bunları kullanarak dili zorlaĢtıracak ayrıntılara boğulmadan problemleri
ccediloumlzebilecektir
TARİHİ GELİŞİMİ
Scheme 1970 yılı ortalarında MIT profesoumlrleri Guy Lewis Steele ve Gerald Jay Sussman tarafından geliĢtirilmiĢ fonksiyonel bir dildir
BaĢlangıccedilta Sussman ve Hewitt birlikte MDL(MIT Design Language) uumlzerinde bir ccedilalıĢma yaptılar ( MDL Carl Hewittin Planner adlı projesi iccedilin geniĢletilmiĢ bir LISP diyalektidir )
1971 yılında Sussman ve bir grup Profesoumlr Micro-plannerı geliĢtirdiler
Ardından Conniver adında yine LISP tabanlı bir programlama dili geliĢtirdiler( ama bu ccedilalıĢmaların sonuccedillarını pek uumlretken bulamadılar ve farklı yollara youmlneldiler Steele oumlğrenimi suumlresinde dıĢarıdaki geliĢmeleri duumlzenli olarak takip ediyordu
Steele mezun olmasının ardından Sussman ile birlikte MacLisp programlama dilini kullanarak kendilerine ait LISPlerini geliĢtirdi
Daha sonra bu mekanizmayı geliĢtirerek kendi modellerini actor oluĢturabilecek ve mesaj goumlnderebilecek duumlzeye getirmeyi baĢardılar
GeliĢtirdikleri modelleme ccedilalıĢmaları iyiye gidince bu modele Schemer adını verdiler ama daha sonra ana sistem uumlzerine kurulmuĢ ITS dosya sisteminin 6 karakter limitine uymak iccedilin adını Scheme olarak değiĢtirdiler
1973 yılında MIT profesoumlrlerinden Carl Hewitt eĢzamanlı hesaplamada actor model adında matematiksel bir model geliĢtirdi
Sussman ve Steele bu modele daha iyi bir anlam kazandırmak amacıyla Scheme programlama dilini oluĢturdular
Sussman ve Steelein ccedilalıĢmalarıyla kuumlccediluumlk ve yeterli bir LISP diyalekti ortaya ccedilıkmıĢ oldu
1980 den beri geliĢtirilmiyor
IEEE tarafından 1978ndash1990 ile standartlaĢtırılmıĢtır
ġu anda R6RS (Revised6 Report on the Algorithmic Language Scheme) en son kabul edilen rapordur
MITlsquo de lisans oumlğrencilerine ilk programlama dersi olarak verilmekteydi
MIT profesoumlrlerinden Harold Abelson ve Gerald Jay Sussman tarafından yazılmıĢ ve ilk baskısı 1984 yılında oluĢturulmuĢ
Structure ve Interpretation of Computer Programs kitabı derslerde kullanılmaktadır Orta Doğu Teknik Uumlniversitesinde de boumlluumlme giren oumlğrenciler programlama duumlnyasındaki ilk adımlarını Scheme programlama dilini oumlğrenerek baĢlamaktadır
Ders kitabı olarak zamanın MIT profesoumlrlerinden Biran Harvey(UC Berkeley) ve Matthew Wright tarafından yazılmıĢ Simply Scheme adlı kitap kullanılmaktadır
KISACA
1 Ġlk ccedilıkıĢı 1975 2 TASARIMCISI Guy L Steele ve Gerald Jay Sussman 3 SUumlRUumlMUumlR6RS (onaylı standart) (2007) 4 TIP SĠSTEMĠ guumlccedilluuml dinamik
5 ETKĠLENDĠKLERI DĠL Lisp ALGOL MDL 6 ETKILEDIĞI DIL Common Lisp EuLisp JavaScript R Ruby Dylan
Lua Hop Racket 7 DOSYA UZANTISIscm ss 8 PARADĠKMASI fonksiyonel meta yordamsal
Scheme dili fonksiyonel bir dildir
Nesneye dair hiccedil bir Ģey yoktur Yorumlayıcı tarafından yorumlanan
fonksiyonel bir dildir
Yani programlar matematiksel fonksiyonlar tarafından yapılır
Fonksiyonların aldıkları girdi ve ccedilıktı sabittir
Programa girilen değere goumlre fonksiyonda bir değiĢiklik yapmadan
fonksiyonu aynen uygular Atama deyimleri bulunmaz
DeğiĢken değerleri bir defa atanır ve bir daha değiĢmez Fonksiyonel
programların artılarından biri bir fonksiyonu ccedilağırmanın kendi sonucunu
geriye doumlnduumlrmekten baĢka bir sonucu olmadığından bug oluĢumunu
engeller
EDİTOumlR KURULUMU
Bu linkten ldquo httpracket-langorgdownload ldquo editoumlruuml indirilebilir
Next diyoruz
Next diyoruz
Install diyoruz
Bu boumlluumlm bittikten sonra editoumlruumlmuumlzuumln kurulumu tamamlanmış olacaktır
EDİTOumlR TANITIMI
FILE MENUumlSUuml
mdashNEW yeni sayfa accedilar
mdashNEW TAB yeni bir sekme accedilar
mdashOPEN oumlnceden yapılmıĢ dosyayı accedilar
mdashOPEN RECENT en son accedilılmıĢ olan sayfayı accedilar
mdashINSTALL PLT FILE buna tıkladığımızda WEB ve FILE diye 2 kısım
karsımıza ccedilıkar
WEB de web den dosya yuumlklemek iccedilin (URL) giriyoruz
FILE da ise bilgisayarda bulunan herhangi bir DrScheme projesini accedilmak
iccedilin kullanıyoruz
mdashREVERT projeyi en son derlenmiĢ haline doumlnduumlruumlr Yani derlendikten
sonraki değiĢiklikleri siler
mdashSAVE DEFINITIONS projeyi kaydeder
mdash SAVE DEFINITIONS AS projeyi farklı isimde kaydetmek iccedilin kullanılır
mdashPRINT DEFINITIONS projeyi yazıcıdan ccedilıkarmak iccedilin kullanılır
mdashPRINT INTERACTION projenin ccedilıktısını yazıcıdan ccedilıkarmak iccedilin kullanılır
EDIT MENUumlSUuml
mdashUNDO (ctrl+z) geri alma goumlrevini yapar
mdashREDO (ctrl+y) ileri alma goumlrevini yapar
mdashOVERWRITE MODE C dilindeki INSERT gibi yeni harfi eski harfin uumlzerine
yazar Bir ya da birkaccedil harfi değiĢtirir(Biz uumlzerine gelip tıkladıktan sonra
yazarken değiĢtirir)
mdashWRAP TEXT kod satırları uzadığında kodlar otomatik alt satıra geccediler
mdashFIND ekranda yazılanları değiĢtirmek iccedilin kullanılır FIND a tıkladığımızda alt
kısımda ccedilıkan alana değiĢtirmek istediğimiz yeni değeri yazdığımızda editoumlr
bulduğu kelimeleri yuvarlak iccediline alınır
mdashREPLACE değiĢtirmek istenen yeri yazıyoruz(Ccedilıkan iki kutudan birine nereyi
değiĢtireceğimizi diğerine neyle değiĢtireceğimizi yazarız)
mdashHĠDE REPLACE atadığımız yeni değeri gizler
mdashKEY BINDING anahtar kelimeler
mdashPREFERENCES buradan oumlzellikleri ayarlıyoruz Oumlrneğin
FONT SĠZE yazının buumlyuumlkluumlğuumlnuuml
FONT NAME yazının ismini
COLORS da Background Color arka plan rengini ayarlar
SCHEME symbol keyword string vb yazının rengi tipi koyuluğunu
değiĢtirmek iccedilin kullanılır
FIND CASE SENSTĠVE kuumlccediluumlk buumlyuumlk harfe duyarlı olup olmadığını
goumlsterir Ġstersek ayarlayabiliriz
VIEW MENUumlSUuml
mdashHIDE DEFINITION kodların yazıldığı ekranı gizler(uumlst kısım)
mdashHIDE INTERACTION ccedilıktıların yazılı olduğu ekranı gizler(alt kısım)
mdashUSE HORIZONTAL LAYOUT editoumlruumlmuumlzdeki alttaki kısmı yanda goumlsterir
mdashSHOW PROGRAM COUNTER definition kısmındaki kodların toplu
goumlruumlnduumlğuuml ekranı getirir
mdashTOOLBAR
mdash TOOLBAR ON LEFT toolbarı solda goumlsterir mdash TOOLBAR ON RIGHT toolbarı sağda goumlsterir mdash TOOLBAR ON TOP toolbarı tepede goumlsterir mdash TOOLBAR ON HIDDEN toolbarı tamamen saklar mdashSHOW LĠNE NUMBERS sol tarafta satırlara sıra no verir
mdashSPLIT ekranın uumlst kısmını 2 ye ayırır(alt alta)
mdashCOLLAPSE ekranı eski haline getirir
LANGUAGE MENUumlSUuml
mdashCHOOSE LANGUAGE dil seccedilimi yapmayı sağlar Kullanıcı seviyesine goumlre dili seccediler Bazı
komutlar her dilde ccedilalıĢmamaktadır Oumlrnegin
BEGINNING STUDENT seccedilildiğinde Display komutu ccedilalıĢmaz
PRETTY BIG seccedilildiğinde ccedilalıĢır
RACKET MENUumlSUuml
mdashRUN programı ccedilalıĢtırır
mdashLIMIT MEMORY -unlimited
mdashlimited
Bu oumlzellikle varsayılan limit(128mb) olan bu hafızayı
değiĢtirebiliyoruz Boumlylece proje bize lazım olan hafıza kadar yer tutuyor
fazlasını tutmuyor
mdashCREATE EXECUTABLE Exe oluĢturmamızı sağlar
mdashCOMMENT OUT WĠTH A BOX kutu iccedilinde yorum satırı oluĢturmamızı
sağlar
mdashCOMMENT OUT WĠTH SEMĠCOLONS ( ) noktalı virguumll kullanarak yorum
satırı oluĢturmamızı sağlar
INSERT MENUumlSUuml
mdashINSERT COMMENT BOX kutu iccedilinde yorum satırı eklemeyi sağlar
mdashINSERT IMAGE resim eklenir
mdashINSERT FRACTION kesirli sayı oluĢturmak iccedilin kullanılır
mdashCHECK SYNTAX yazım hatalarını kontrol eder
mdashMACRO STEPPER kodu satır ccedilalıĢtırarak ilerler C taki F11 tuĢu gibi
ccedilalıĢır
Editoumlr uumlzerinde ise
Sağ alttaki ccedilarpı alt ekranı kapatmamızı sağlar
Sağ alt koumlĢedeki sayılar imlecin bulunduğu satır ve suumltunu goumlsterir
Sol altta seccediltiğimiz dil yazılıdır Uumlzerine tıkladığımızda daha oumlnceden
kullandığımız dillerin listesi goumlruumlnuumlr
DOSYA İŞLEMLERİ
Open-input-file Okunacak dosyayı accedilar
Open-output-file Yazılacak dosyayı accedilarDosya oumlnceden oluĢturulmamıĢsa oluĢturur
Close-input-port Input dosyasını kapatır
Close-output-port Output dosyasını kapatır
Read-char Dosyadan bir karakter okuduktan sonra imleci diğer karaktere taĢır Peek-char read-charlsquodan farkı imleci taĢımaz
Read-string Belirtilen sayı kadar karakter okur
Read-line Satır okur
Write Dosyaya string ifadeyi tırnak iĢaretleriyle birlikte yazar
Display Dosyaya string ifadeyi tırnak iĢaretleri olmadan yazar
Write-string Dosyaya string ifadeyi tırnak iĢaretleri olmadan yazar ayrıca karakter saysını
alt ekranda goumlsterir
With-input-from-file with-output-to-file Dosya accedilma kapatma iĢlemini otomatik yapıp
verilen proseduumlruuml uygular
Oumlrnek kodlar
Dosyadan okuma
Dosyada Scheme is fun
Write with Schemelsquo yazılıdır
(define p (open-input-file testtxt)) (read p)
(read-line p)
(read-string 300 p)
(close-input-port p) Ccedilıktısı Scheme is funr
Write with Scheme
----------------------
(with-input-from-file testtxt
(lambda ()
(read) ))
Ccedilıktısı Scheme
Dosyaya yazma
(define y merhaba)
(define p (open-output-file testtxt))
(write y p)
(display y p)
(write ifade p )
(write-char k p)
(close-output-port p)
-------------------------
(with-output-to-file test2txt
(lambda ()
(display Hello world) ))
---------------------------
KULLANICI ETKİLEŞİMİ
Bu dilde fonksiyonlar değiĢkenlere değer olarak atanan veya fonksiyonlara
delil olarak geccedilirilebilir Schemelsquode Scheme kodunu oluĢturan ve
yorumlanmasını(interpretation) isteyen bir fonksiyon tanımlamak muumlmkuumlnduumlr
Bu muumlmkuumlnduumlr ccediluumlnkuuml yorumlayıcı(interpreter) kullanıcı tarafından
eriĢilebilen(user-available) bir fonksiyondur Fonksiyonel dillerin tasarımı
Matematiksel Fonksiyonlara dayalıdır
Kullanıcıya da yakın olan sağlam bir teorik temel fakat nispeten programların
koĢacağı makinelerin mimarileriyle ilgisizdir
Schemelsquoi ayrıca diğer dillerden ayıra en oumlnemli oumlzelliklerden biri de ccedilalıĢma
esnasında uygulamaya muumldahale edebilme iznini vermesidir Bu oumlzellik
sadece oumlnceden derlenmiĢ ve ağır plug-inler aracılığı ile geniĢletilen
uygulamalara kıyasla ccedilok daha buumlyuumlk bir avantaj
FONKSİYONLAR
Bu dilde fonksiyonlar birinci-sınıf varlıklardır(entities)
ndashĠfadelerin(expressions) değerleri ve listelerin elemanları olabilirler
ndashDeğiĢkenlere(variables) atanabilirler ve parametrelere geccedililebilirler
Scheme dilindeki formlar ikiye ayrılır
Temel Formlar define lambda if quote unquote unquote-splicing
quasiquote define-syntax let-syntax letrec-syntax syntax-rules set
( 5 4) sonuccedil olarak karĢımıza ccedilikacaktir
Ifadesi de yorum satırı haline getirir kodu
Ġf deyimini oumlrnekle accedilıklayalım
(If lsaquo expr rsaquo lsaquoexpr rsaquo lsaquoexpr rsaquo)
(If (= (+ 4 5) 9) t f)
Burada ilk verdiğimiz arguumlman (= (+ 4 5) 9) iĢleminin doğru olup
olmadığına bakar Eğer iĢlem doğruysa ccedilıktı olarak t yanlıĢsa f doumlner
Anlayacağınız uumlzere bu oumlzel durum proseduumlruuml koĢul gerektiren bir proseduumlr
bu durumda ilk verdiğimiz arguumlman da koĢulu belirleyen parccedila oluyor Oumlnce
o koĢulu inceleyen yorumlayıcı da daha sonra verdiğimiz diğer arguumlmanları
koĢula goumlre seccedilerek bize gereken ccedilıktıyı veriyor
Cond deyimi( cond[ltİfadegt ltİfadegt] )
Bir soruya dayalı alternatif cevapları seccedilmek istiyorsanız cond ifadesi kullanılır
ġart ifadesidir
Cond Ģeklinde koumlĢeli parantez maddeler dizisi iccedilerir
(Cond
((ltSıcaklık 50) Soğuk)
((gt Sıcaklık 90) Ccedilok sıcak )
(else Sorun yok))
Ayrıca else Scheme dilinde cond ifadesiyle kullanılır diğer dillerde olduğu gibi if
le değil Else ifadesi ise diğer koĢullar olmadığında else koĢulu olacaktır
Do ifadesi
(do ((i 0 (+ i 1))) ((gt i 2)) (display i) (newline))
Programın ccedilıktısı
0
1
2 dir Ġlk oumlnce i ye 0 atıyor ve i yi 1 er 1 er artırarak i 2 den buumlyuumlk olana
kadar doumlnduumlruumlyor display ile de ekrana yazdırıyornewline satırı ilede bir alt
satıra geccediliyor
While ifadesi
(While (koĢul ))
(Deyim1)
(Deyim2)
)
Let ifadesi
(let ((x 5)) ( x 2))
Ekran ccedilıktısı ise 10 olurLet yanındaki ilk koĢul ifadesinde değer ataması
yapılır ve diğer ifadede de matematiksel iĢlemi gerccedilekleĢtirir
Listeler
List fonksiyonu herhangi bir sayı alır ve değerlerini iccedileren bir liste doumlnduumlruumlr
gt(listKırmızı YeĢil Mavi)
(Kırmızı yeĢilmavi)
gt(list 1 2 3 4 5)
(1 2 3 4 5)
LIST
ndash Herhangi bir sayıda parametre alır elemanları bu parametreler olan bir liste
doumlnduumlruumlr
Ayrıca Bizim listelerde bulmak iccedilin uğraĢtığımız problemler iccedilin direk
fonksiyonlar var Mesela
first listenin ilk elemanını alır
Rest listenin ilk elemanı haricindekileri alır
gt (first (list 1 2 3 ))
1
gt(rest (list 1 2 3 ))
2 3
Listeler iccedilin bir oumlrnek daha
gt( list ( list 1 2 3 ) 5 (list a b c) )
((1 2 3) 5 (a b c))
Hello World Uygulaması
Programlamaya ilk baslayan herkesin yaptığı gibi bizde scheme dilinde
ekrana ―hello world yazdiralimScheme dilinde farkli seviyelerde farklı kodlar
kullanilirPretty Big de hemen hemen buumltuumln kodlar ccedilalıĢtığı iccedilin biz genelde bu
level ı kullaniyoruz
Display ―Hello World
(write Hello World )
―Hello World
Yukarı da goumlruumllen kodlar ccedilalıĢtırıldığında aynı ekran ccedilıktısına sahip
olurlarGoumlruumllduumlğuuml gibi ne noktalı virguumll nede fazla kelimeye gerek kalmıyor
Matematik Fonksiyonları
(Exp x) e^x in sonucunu doumlnduumlruumlr
(Log x) x sayısının logaritma değerini doumlnduumlruumlr
(sqrt x) x koumlkuumlnuumln karesini doumlnduumlruumlr
(max x1 x2) verilen listeden en buumlyuumlk sayıyı doumlnduumlruumlr
(min x1 x2) verilen listeden en kuku sayıyı doumlnduumlruumlr
(quotient x1 x2) x1x2 kesrinin boumlluumlmuumlnuuml doumlnduumlruumlr
(remian x1 x2) x1x2 kesrinin kalanini doumlnduumlruumlr
(modula x1 x2) x1 in x2 ye moduumlluuml sonucunu doumlnduumlruumlr
(gcm num1 num2 ) Verilen listenin en buumlyuumlk ortak boumlleni doumlnduumlruumlr
(lcm num1 num2 ) Verilen listenin en kuku ortak ccedilarpanı doumlnduumlruumlr
(Ceiling x) x ten kuku olmayan en kuku değeri doumlnduumlruumlr
( turn cate x) Mutlak değeri x in mutlak değerinden buumlyuumlk olmayan Xlsquo en
yakın değeri doumlnduumlruumlr
(round x) xe en yakın değere yuvarlıyor
İlişkisel Operatoumlrler
(=x 1) x 1 ise true doumlnduumlruumlr
(ltx y) x yden kuumlccediluumlkse true doumlnduumlruumlr
(gtx y) x y den buumlyuumlkse true doumlnduumlruumlr
(lt=x y) x yden kuku veya eĢitse true doumlnduumlruumlr
(gt=x y) x yden buumlyuumlk veya eĢitse true doumlnduumlruumlr
(eq x y) x ve y aynı ise true doumlnduumlruumlr
(equal x y) x ve y aynı yapıda olup aynı iccedileriğe sahipse true doumlnduumlruumlr
Tip Yuumlklemeleri
(procedure x)X fonksiyon ise true doumlnduumlruumlr
(null x) X boĢ bir liste ise true doumlnduumlruumlr
(zero x )X sıfır ise true doumlnduumlruumlr
(odd x) X tek ise true doumlnduumlruumlr
(even x) X tek ise true doumlnduumlruumlr
(symbolx) X tek ise true doumlnduumlruumlr
Asal Sayı Bulma Programı
(Define (divides m n)
(Cond
[(zero m) true]
[(amplt m n) false]
[else (divides (- m n) n)]
))
(Define (check-prime prime-cand divisor)
(cond
[(= 1 divisor) true]
[(divides prime-cand divisor) false]
[else (check-prime prime-cand (sub1 divisor))]))
(define (prime x)
(cond
[(= x 0) false]
[(= x 1) false]
[else (check-prime x (- x 1))]
))
KAYNAKLAR
wwwbilgisayarkavramlaricom
httpe-bergicom2010OcakScheme
httpwwwhtdporg2003ndash09ndash26Bookcurriculum-Z-H-1html
httptranslategooglecomtrtranslatehl=tramplangpair=en7Ctrampu=http httpprogramming-musingsorg20091223scheme-lectures-mostly httptranslategooglecomtrtranslatehl=trampsl=enampu=http3A2F2Fw
httpblogyollucomtagscheme
httpwwwschemecomtspl4 httpracket-langorgdownload
PROJE KONUSU SCHEME DİLİNİN OZELİKLERİNİ TAŞIYAN VE BU PDF DE
ANLATILAN KONULAR İLGİLİ 10 SORU HAZIRLANIP BUNLARIN CEVAPLARINI
KULANICIDAN İSTENİLMESİ
PROJEDE KULANILANLAR
LİSTE
FONKSİYON
KOŞUL CUumlMLESİ
DEĞER ATAMALARI
PROJE KODU
(define k 0)
(define doğrular 0)
(define yanlışlar 0)
sorular
(define a 1soru Lamda nedir)
(define A1 1 isimsiz fonksiyonları belirler)
(define B1 2 değer ataması yapar)
(define C1 3 pointer goumlrevi yapar)
(define b 2soru hangisi aritmetik fonksiyon değildir)
(define A2 1 SQRT )
(define B2 2 MIN )
(define C2 3 QUOTE )
(define c 3soru=list kulanımı nasıldır)
(define A3 (1 LIST (A) (B) (C) (D)))
(define B3 (2 LIST A B C D) )
(define C3 (3 LIST A B C D) )
(define d 4soru=equalsimp ne demek)
(define A4 1 iki basit liste alır ve eşitliğini kontrol eder)
(define B4 2 listeleri birbirine atar)
(define C4 3 listeleri eşitler)
(define e1 5soru=append ne işe yarar)
(define A5 1 İki listeyi peş peşe ekler)
(define B5 2 iki listeyi ccedilıkarır)
(define C5 3 iki listeyi ccedilarpar)
(define f 6soru set isimlere değer atar doğrumudur)
(define A6 1 doğru)
(define B6 2 yanlis)
doğru cevap listesi
(define DListe (list 1 1 1 2 3 1) )
şıkları yazdırma
(define (Cevaplar cevapListesi)
( cond [(null cevapListesi) 0]
[else (Cevaplar (rest cevapListesi))
(display (first cevapListesi))
(display n)
]))
doğru yanlış kontroluuml
(define kon
(lambda (k FDL)
(cond ((= k FDL) (display Tebrikler )nn)(set dogrular (+ 1 dogrular)))
else ( display Maalesef olmadı (nn)(set yanlislar (+ 1 yanlislar))])))
soru ve şıkları yazdırıp cevap kontroluumlnuuml ccedilağırma
(define (Sorular soruListesi cevpListesi DListesi )
( cond [(null soruListesi) 0]
[else
(Sorular (rest soruListesi) (rest cevpListesi) (rest DListesi ))
(display (first soruListesi))
(display n)
(Cevaplar (first cevpListesi)) (set k (read)) (kon k (first DListesi)) ]))
şık listesi
(define CListe (list(list B6 A6) (list C5 B5 A5) (list C4 B4 A4) (list C3 B3 A3) (list C2 B2
A2)(list C1 B1 A1)))
Sorular fonksiyonunu ccedilağırma
(Sorular (list f e1 d c b a) CListe DListe )
yapılan doğru ve yanlış sayısını goumlsterme
(display Doğru cevap sayısı )
dogrular
(display Yanlış cevap sayısı )
yanlislar
EMEĞİ GECcedilEN BUumlTUumlN HERKESE TEŞEKUumlRLERİMİZİ SUNUYORUZhellip
BaĢlangıccedilta Sussman ve Hewitt birlikte MDL(MIT Design Language) uumlzerinde bir ccedilalıĢma yaptılar ( MDL Carl Hewittin Planner adlı projesi iccedilin geniĢletilmiĢ bir LISP diyalektidir )
1971 yılında Sussman ve bir grup Profesoumlr Micro-plannerı geliĢtirdiler
Ardından Conniver adında yine LISP tabanlı bir programlama dili geliĢtirdiler( ama bu ccedilalıĢmaların sonuccedillarını pek uumlretken bulamadılar ve farklı yollara youmlneldiler Steele oumlğrenimi suumlresinde dıĢarıdaki geliĢmeleri duumlzenli olarak takip ediyordu
Steele mezun olmasının ardından Sussman ile birlikte MacLisp programlama dilini kullanarak kendilerine ait LISPlerini geliĢtirdi
Daha sonra bu mekanizmayı geliĢtirerek kendi modellerini actor oluĢturabilecek ve mesaj goumlnderebilecek duumlzeye getirmeyi baĢardılar
GeliĢtirdikleri modelleme ccedilalıĢmaları iyiye gidince bu modele Schemer adını verdiler ama daha sonra ana sistem uumlzerine kurulmuĢ ITS dosya sisteminin 6 karakter limitine uymak iccedilin adını Scheme olarak değiĢtirdiler
1973 yılında MIT profesoumlrlerinden Carl Hewitt eĢzamanlı hesaplamada actor model adında matematiksel bir model geliĢtirdi
Sussman ve Steele bu modele daha iyi bir anlam kazandırmak amacıyla Scheme programlama dilini oluĢturdular
Sussman ve Steelein ccedilalıĢmalarıyla kuumlccediluumlk ve yeterli bir LISP diyalekti ortaya ccedilıkmıĢ oldu
1980 den beri geliĢtirilmiyor
IEEE tarafından 1978ndash1990 ile standartlaĢtırılmıĢtır
ġu anda R6RS (Revised6 Report on the Algorithmic Language Scheme) en son kabul edilen rapordur
MITlsquo de lisans oumlğrencilerine ilk programlama dersi olarak verilmekteydi
MIT profesoumlrlerinden Harold Abelson ve Gerald Jay Sussman tarafından yazılmıĢ ve ilk baskısı 1984 yılında oluĢturulmuĢ
Structure ve Interpretation of Computer Programs kitabı derslerde kullanılmaktadır Orta Doğu Teknik Uumlniversitesinde de boumlluumlme giren oumlğrenciler programlama duumlnyasındaki ilk adımlarını Scheme programlama dilini oumlğrenerek baĢlamaktadır
Ders kitabı olarak zamanın MIT profesoumlrlerinden Biran Harvey(UC Berkeley) ve Matthew Wright tarafından yazılmıĢ Simply Scheme adlı kitap kullanılmaktadır
KISACA
1 Ġlk ccedilıkıĢı 1975 2 TASARIMCISI Guy L Steele ve Gerald Jay Sussman 3 SUumlRUumlMUumlR6RS (onaylı standart) (2007) 4 TIP SĠSTEMĠ guumlccedilluuml dinamik
5 ETKĠLENDĠKLERI DĠL Lisp ALGOL MDL 6 ETKILEDIĞI DIL Common Lisp EuLisp JavaScript R Ruby Dylan
Lua Hop Racket 7 DOSYA UZANTISIscm ss 8 PARADĠKMASI fonksiyonel meta yordamsal
Scheme dili fonksiyonel bir dildir
Nesneye dair hiccedil bir Ģey yoktur Yorumlayıcı tarafından yorumlanan
fonksiyonel bir dildir
Yani programlar matematiksel fonksiyonlar tarafından yapılır
Fonksiyonların aldıkları girdi ve ccedilıktı sabittir
Programa girilen değere goumlre fonksiyonda bir değiĢiklik yapmadan
fonksiyonu aynen uygular Atama deyimleri bulunmaz
DeğiĢken değerleri bir defa atanır ve bir daha değiĢmez Fonksiyonel
programların artılarından biri bir fonksiyonu ccedilağırmanın kendi sonucunu
geriye doumlnduumlrmekten baĢka bir sonucu olmadığından bug oluĢumunu
engeller
EDİTOumlR KURULUMU
Bu linkten ldquo httpracket-langorgdownload ldquo editoumlruuml indirilebilir
Next diyoruz
Next diyoruz
Install diyoruz
Bu boumlluumlm bittikten sonra editoumlruumlmuumlzuumln kurulumu tamamlanmış olacaktır
EDİTOumlR TANITIMI
FILE MENUumlSUuml
mdashNEW yeni sayfa accedilar
mdashNEW TAB yeni bir sekme accedilar
mdashOPEN oumlnceden yapılmıĢ dosyayı accedilar
mdashOPEN RECENT en son accedilılmıĢ olan sayfayı accedilar
mdashINSTALL PLT FILE buna tıkladığımızda WEB ve FILE diye 2 kısım
karsımıza ccedilıkar
WEB de web den dosya yuumlklemek iccedilin (URL) giriyoruz
FILE da ise bilgisayarda bulunan herhangi bir DrScheme projesini accedilmak
iccedilin kullanıyoruz
mdashREVERT projeyi en son derlenmiĢ haline doumlnduumlruumlr Yani derlendikten
sonraki değiĢiklikleri siler
mdashSAVE DEFINITIONS projeyi kaydeder
mdash SAVE DEFINITIONS AS projeyi farklı isimde kaydetmek iccedilin kullanılır
mdashPRINT DEFINITIONS projeyi yazıcıdan ccedilıkarmak iccedilin kullanılır
mdashPRINT INTERACTION projenin ccedilıktısını yazıcıdan ccedilıkarmak iccedilin kullanılır
EDIT MENUumlSUuml
mdashUNDO (ctrl+z) geri alma goumlrevini yapar
mdashREDO (ctrl+y) ileri alma goumlrevini yapar
mdashOVERWRITE MODE C dilindeki INSERT gibi yeni harfi eski harfin uumlzerine
yazar Bir ya da birkaccedil harfi değiĢtirir(Biz uumlzerine gelip tıkladıktan sonra
yazarken değiĢtirir)
mdashWRAP TEXT kod satırları uzadığında kodlar otomatik alt satıra geccediler
mdashFIND ekranda yazılanları değiĢtirmek iccedilin kullanılır FIND a tıkladığımızda alt
kısımda ccedilıkan alana değiĢtirmek istediğimiz yeni değeri yazdığımızda editoumlr
bulduğu kelimeleri yuvarlak iccediline alınır
mdashREPLACE değiĢtirmek istenen yeri yazıyoruz(Ccedilıkan iki kutudan birine nereyi
değiĢtireceğimizi diğerine neyle değiĢtireceğimizi yazarız)
mdashHĠDE REPLACE atadığımız yeni değeri gizler
mdashKEY BINDING anahtar kelimeler
mdashPREFERENCES buradan oumlzellikleri ayarlıyoruz Oumlrneğin
FONT SĠZE yazının buumlyuumlkluumlğuumlnuuml
FONT NAME yazının ismini
COLORS da Background Color arka plan rengini ayarlar
SCHEME symbol keyword string vb yazının rengi tipi koyuluğunu
değiĢtirmek iccedilin kullanılır
FIND CASE SENSTĠVE kuumlccediluumlk buumlyuumlk harfe duyarlı olup olmadığını
goumlsterir Ġstersek ayarlayabiliriz
VIEW MENUumlSUuml
mdashHIDE DEFINITION kodların yazıldığı ekranı gizler(uumlst kısım)
mdashHIDE INTERACTION ccedilıktıların yazılı olduğu ekranı gizler(alt kısım)
mdashUSE HORIZONTAL LAYOUT editoumlruumlmuumlzdeki alttaki kısmı yanda goumlsterir
mdashSHOW PROGRAM COUNTER definition kısmındaki kodların toplu
goumlruumlnduumlğuuml ekranı getirir
mdashTOOLBAR
mdash TOOLBAR ON LEFT toolbarı solda goumlsterir mdash TOOLBAR ON RIGHT toolbarı sağda goumlsterir mdash TOOLBAR ON TOP toolbarı tepede goumlsterir mdash TOOLBAR ON HIDDEN toolbarı tamamen saklar mdashSHOW LĠNE NUMBERS sol tarafta satırlara sıra no verir
mdashSPLIT ekranın uumlst kısmını 2 ye ayırır(alt alta)
mdashCOLLAPSE ekranı eski haline getirir
LANGUAGE MENUumlSUuml
mdashCHOOSE LANGUAGE dil seccedilimi yapmayı sağlar Kullanıcı seviyesine goumlre dili seccediler Bazı
komutlar her dilde ccedilalıĢmamaktadır Oumlrnegin
BEGINNING STUDENT seccedilildiğinde Display komutu ccedilalıĢmaz
PRETTY BIG seccedilildiğinde ccedilalıĢır
RACKET MENUumlSUuml
mdashRUN programı ccedilalıĢtırır
mdashLIMIT MEMORY -unlimited
mdashlimited
Bu oumlzellikle varsayılan limit(128mb) olan bu hafızayı
değiĢtirebiliyoruz Boumlylece proje bize lazım olan hafıza kadar yer tutuyor
fazlasını tutmuyor
mdashCREATE EXECUTABLE Exe oluĢturmamızı sağlar
mdashCOMMENT OUT WĠTH A BOX kutu iccedilinde yorum satırı oluĢturmamızı
sağlar
mdashCOMMENT OUT WĠTH SEMĠCOLONS ( ) noktalı virguumll kullanarak yorum
satırı oluĢturmamızı sağlar
INSERT MENUumlSUuml
mdashINSERT COMMENT BOX kutu iccedilinde yorum satırı eklemeyi sağlar
mdashINSERT IMAGE resim eklenir
mdashINSERT FRACTION kesirli sayı oluĢturmak iccedilin kullanılır
mdashCHECK SYNTAX yazım hatalarını kontrol eder
mdashMACRO STEPPER kodu satır ccedilalıĢtırarak ilerler C taki F11 tuĢu gibi
ccedilalıĢır
Editoumlr uumlzerinde ise
Sağ alttaki ccedilarpı alt ekranı kapatmamızı sağlar
Sağ alt koumlĢedeki sayılar imlecin bulunduğu satır ve suumltunu goumlsterir
Sol altta seccediltiğimiz dil yazılıdır Uumlzerine tıkladığımızda daha oumlnceden
kullandığımız dillerin listesi goumlruumlnuumlr
DOSYA İŞLEMLERİ
Open-input-file Okunacak dosyayı accedilar
Open-output-file Yazılacak dosyayı accedilarDosya oumlnceden oluĢturulmamıĢsa oluĢturur
Close-input-port Input dosyasını kapatır
Close-output-port Output dosyasını kapatır
Read-char Dosyadan bir karakter okuduktan sonra imleci diğer karaktere taĢır Peek-char read-charlsquodan farkı imleci taĢımaz
Read-string Belirtilen sayı kadar karakter okur
Read-line Satır okur
Write Dosyaya string ifadeyi tırnak iĢaretleriyle birlikte yazar
Display Dosyaya string ifadeyi tırnak iĢaretleri olmadan yazar
Write-string Dosyaya string ifadeyi tırnak iĢaretleri olmadan yazar ayrıca karakter saysını
alt ekranda goumlsterir
With-input-from-file with-output-to-file Dosya accedilma kapatma iĢlemini otomatik yapıp
verilen proseduumlruuml uygular
Oumlrnek kodlar
Dosyadan okuma
Dosyada Scheme is fun
Write with Schemelsquo yazılıdır
(define p (open-input-file testtxt)) (read p)
(read-line p)
(read-string 300 p)
(close-input-port p) Ccedilıktısı Scheme is funr
Write with Scheme
----------------------
(with-input-from-file testtxt
(lambda ()
(read) ))
Ccedilıktısı Scheme
Dosyaya yazma
(define y merhaba)
(define p (open-output-file testtxt))
(write y p)
(display y p)
(write ifade p )
(write-char k p)
(close-output-port p)
-------------------------
(with-output-to-file test2txt
(lambda ()
(display Hello world) ))
---------------------------
KULLANICI ETKİLEŞİMİ
Bu dilde fonksiyonlar değiĢkenlere değer olarak atanan veya fonksiyonlara
delil olarak geccedilirilebilir Schemelsquode Scheme kodunu oluĢturan ve
yorumlanmasını(interpretation) isteyen bir fonksiyon tanımlamak muumlmkuumlnduumlr
Bu muumlmkuumlnduumlr ccediluumlnkuuml yorumlayıcı(interpreter) kullanıcı tarafından
eriĢilebilen(user-available) bir fonksiyondur Fonksiyonel dillerin tasarımı
Matematiksel Fonksiyonlara dayalıdır
Kullanıcıya da yakın olan sağlam bir teorik temel fakat nispeten programların
koĢacağı makinelerin mimarileriyle ilgisizdir
Schemelsquoi ayrıca diğer dillerden ayıra en oumlnemli oumlzelliklerden biri de ccedilalıĢma
esnasında uygulamaya muumldahale edebilme iznini vermesidir Bu oumlzellik
sadece oumlnceden derlenmiĢ ve ağır plug-inler aracılığı ile geniĢletilen
uygulamalara kıyasla ccedilok daha buumlyuumlk bir avantaj
FONKSİYONLAR
Bu dilde fonksiyonlar birinci-sınıf varlıklardır(entities)
ndashĠfadelerin(expressions) değerleri ve listelerin elemanları olabilirler
ndashDeğiĢkenlere(variables) atanabilirler ve parametrelere geccedililebilirler
Scheme dilindeki formlar ikiye ayrılır
Temel Formlar define lambda if quote unquote unquote-splicing
quasiquote define-syntax let-syntax letrec-syntax syntax-rules set
( 5 4) sonuccedil olarak karĢımıza ccedilikacaktir
Ifadesi de yorum satırı haline getirir kodu
Ġf deyimini oumlrnekle accedilıklayalım
(If lsaquo expr rsaquo lsaquoexpr rsaquo lsaquoexpr rsaquo)
(If (= (+ 4 5) 9) t f)
Burada ilk verdiğimiz arguumlman (= (+ 4 5) 9) iĢleminin doğru olup
olmadığına bakar Eğer iĢlem doğruysa ccedilıktı olarak t yanlıĢsa f doumlner
Anlayacağınız uumlzere bu oumlzel durum proseduumlruuml koĢul gerektiren bir proseduumlr
bu durumda ilk verdiğimiz arguumlman da koĢulu belirleyen parccedila oluyor Oumlnce
o koĢulu inceleyen yorumlayıcı da daha sonra verdiğimiz diğer arguumlmanları
koĢula goumlre seccedilerek bize gereken ccedilıktıyı veriyor
Cond deyimi( cond[ltİfadegt ltİfadegt] )
Bir soruya dayalı alternatif cevapları seccedilmek istiyorsanız cond ifadesi kullanılır
ġart ifadesidir
Cond Ģeklinde koumlĢeli parantez maddeler dizisi iccedilerir
(Cond
((ltSıcaklık 50) Soğuk)
((gt Sıcaklık 90) Ccedilok sıcak )
(else Sorun yok))
Ayrıca else Scheme dilinde cond ifadesiyle kullanılır diğer dillerde olduğu gibi if
le değil Else ifadesi ise diğer koĢullar olmadığında else koĢulu olacaktır
Do ifadesi
(do ((i 0 (+ i 1))) ((gt i 2)) (display i) (newline))
Programın ccedilıktısı
0
1
2 dir Ġlk oumlnce i ye 0 atıyor ve i yi 1 er 1 er artırarak i 2 den buumlyuumlk olana
kadar doumlnduumlruumlyor display ile de ekrana yazdırıyornewline satırı ilede bir alt
satıra geccediliyor
While ifadesi
(While (koĢul ))
(Deyim1)
(Deyim2)
)
Let ifadesi
(let ((x 5)) ( x 2))
Ekran ccedilıktısı ise 10 olurLet yanındaki ilk koĢul ifadesinde değer ataması
yapılır ve diğer ifadede de matematiksel iĢlemi gerccedilekleĢtirir
Listeler
List fonksiyonu herhangi bir sayı alır ve değerlerini iccedileren bir liste doumlnduumlruumlr
gt(listKırmızı YeĢil Mavi)
(Kırmızı yeĢilmavi)
gt(list 1 2 3 4 5)
(1 2 3 4 5)
LIST
ndash Herhangi bir sayıda parametre alır elemanları bu parametreler olan bir liste
doumlnduumlruumlr
Ayrıca Bizim listelerde bulmak iccedilin uğraĢtığımız problemler iccedilin direk
fonksiyonlar var Mesela
first listenin ilk elemanını alır
Rest listenin ilk elemanı haricindekileri alır
gt (first (list 1 2 3 ))
1
gt(rest (list 1 2 3 ))
2 3
Listeler iccedilin bir oumlrnek daha
gt( list ( list 1 2 3 ) 5 (list a b c) )
((1 2 3) 5 (a b c))
Hello World Uygulaması
Programlamaya ilk baslayan herkesin yaptığı gibi bizde scheme dilinde
ekrana ―hello world yazdiralimScheme dilinde farkli seviyelerde farklı kodlar
kullanilirPretty Big de hemen hemen buumltuumln kodlar ccedilalıĢtığı iccedilin biz genelde bu
level ı kullaniyoruz
Display ―Hello World
(write Hello World )
―Hello World
Yukarı da goumlruumllen kodlar ccedilalıĢtırıldığında aynı ekran ccedilıktısına sahip
olurlarGoumlruumllduumlğuuml gibi ne noktalı virguumll nede fazla kelimeye gerek kalmıyor
Matematik Fonksiyonları
(Exp x) e^x in sonucunu doumlnduumlruumlr
(Log x) x sayısının logaritma değerini doumlnduumlruumlr
(sqrt x) x koumlkuumlnuumln karesini doumlnduumlruumlr
(max x1 x2) verilen listeden en buumlyuumlk sayıyı doumlnduumlruumlr
(min x1 x2) verilen listeden en kuku sayıyı doumlnduumlruumlr
(quotient x1 x2) x1x2 kesrinin boumlluumlmuumlnuuml doumlnduumlruumlr
(remian x1 x2) x1x2 kesrinin kalanini doumlnduumlruumlr
(modula x1 x2) x1 in x2 ye moduumlluuml sonucunu doumlnduumlruumlr
(gcm num1 num2 ) Verilen listenin en buumlyuumlk ortak boumlleni doumlnduumlruumlr
(lcm num1 num2 ) Verilen listenin en kuku ortak ccedilarpanı doumlnduumlruumlr
(Ceiling x) x ten kuku olmayan en kuku değeri doumlnduumlruumlr
( turn cate x) Mutlak değeri x in mutlak değerinden buumlyuumlk olmayan Xlsquo en
yakın değeri doumlnduumlruumlr
(round x) xe en yakın değere yuvarlıyor
İlişkisel Operatoumlrler
(=x 1) x 1 ise true doumlnduumlruumlr
(ltx y) x yden kuumlccediluumlkse true doumlnduumlruumlr
(gtx y) x y den buumlyuumlkse true doumlnduumlruumlr
(lt=x y) x yden kuku veya eĢitse true doumlnduumlruumlr
(gt=x y) x yden buumlyuumlk veya eĢitse true doumlnduumlruumlr
(eq x y) x ve y aynı ise true doumlnduumlruumlr
(equal x y) x ve y aynı yapıda olup aynı iccedileriğe sahipse true doumlnduumlruumlr
Tip Yuumlklemeleri
(procedure x)X fonksiyon ise true doumlnduumlruumlr
(null x) X boĢ bir liste ise true doumlnduumlruumlr
(zero x )X sıfır ise true doumlnduumlruumlr
(odd x) X tek ise true doumlnduumlruumlr
(even x) X tek ise true doumlnduumlruumlr
(symbolx) X tek ise true doumlnduumlruumlr
Asal Sayı Bulma Programı
(Define (divides m n)
(Cond
[(zero m) true]
[(amplt m n) false]
[else (divides (- m n) n)]
))
(Define (check-prime prime-cand divisor)
(cond
[(= 1 divisor) true]
[(divides prime-cand divisor) false]
[else (check-prime prime-cand (sub1 divisor))]))
(define (prime x)
(cond
[(= x 0) false]
[(= x 1) false]
[else (check-prime x (- x 1))]
))
KAYNAKLAR
wwwbilgisayarkavramlaricom
httpe-bergicom2010OcakScheme
httpwwwhtdporg2003ndash09ndash26Bookcurriculum-Z-H-1html
httptranslategooglecomtrtranslatehl=tramplangpair=en7Ctrampu=http httpprogramming-musingsorg20091223scheme-lectures-mostly httptranslategooglecomtrtranslatehl=trampsl=enampu=http3A2F2Fw
httpblogyollucomtagscheme
httpwwwschemecomtspl4 httpracket-langorgdownload
PROJE KONUSU SCHEME DİLİNİN OZELİKLERİNİ TAŞIYAN VE BU PDF DE
ANLATILAN KONULAR İLGİLİ 10 SORU HAZIRLANIP BUNLARIN CEVAPLARINI
KULANICIDAN İSTENİLMESİ
PROJEDE KULANILANLAR
LİSTE
FONKSİYON
KOŞUL CUumlMLESİ
DEĞER ATAMALARI
PROJE KODU
(define k 0)
(define doğrular 0)
(define yanlışlar 0)
sorular
(define a 1soru Lamda nedir)
(define A1 1 isimsiz fonksiyonları belirler)
(define B1 2 değer ataması yapar)
(define C1 3 pointer goumlrevi yapar)
(define b 2soru hangisi aritmetik fonksiyon değildir)
(define A2 1 SQRT )
(define B2 2 MIN )
(define C2 3 QUOTE )
(define c 3soru=list kulanımı nasıldır)
(define A3 (1 LIST (A) (B) (C) (D)))
(define B3 (2 LIST A B C D) )
(define C3 (3 LIST A B C D) )
(define d 4soru=equalsimp ne demek)
(define A4 1 iki basit liste alır ve eşitliğini kontrol eder)
(define B4 2 listeleri birbirine atar)
(define C4 3 listeleri eşitler)
(define e1 5soru=append ne işe yarar)
(define A5 1 İki listeyi peş peşe ekler)
(define B5 2 iki listeyi ccedilıkarır)
(define C5 3 iki listeyi ccedilarpar)
(define f 6soru set isimlere değer atar doğrumudur)
(define A6 1 doğru)
(define B6 2 yanlis)
doğru cevap listesi
(define DListe (list 1 1 1 2 3 1) )
şıkları yazdırma
(define (Cevaplar cevapListesi)
( cond [(null cevapListesi) 0]
[else (Cevaplar (rest cevapListesi))
(display (first cevapListesi))
(display n)
]))
doğru yanlış kontroluuml
(define kon
(lambda (k FDL)
(cond ((= k FDL) (display Tebrikler )nn)(set dogrular (+ 1 dogrular)))
else ( display Maalesef olmadı (nn)(set yanlislar (+ 1 yanlislar))])))
soru ve şıkları yazdırıp cevap kontroluumlnuuml ccedilağırma
(define (Sorular soruListesi cevpListesi DListesi )
( cond [(null soruListesi) 0]
[else
(Sorular (rest soruListesi) (rest cevpListesi) (rest DListesi ))
(display (first soruListesi))
(display n)
(Cevaplar (first cevpListesi)) (set k (read)) (kon k (first DListesi)) ]))
şık listesi
(define CListe (list(list B6 A6) (list C5 B5 A5) (list C4 B4 A4) (list C3 B3 A3) (list C2 B2
A2)(list C1 B1 A1)))
Sorular fonksiyonunu ccedilağırma
(Sorular (list f e1 d c b a) CListe DListe )
yapılan doğru ve yanlış sayısını goumlsterme
(display Doğru cevap sayısı )
dogrular
(display Yanlış cevap sayısı )
yanlislar
EMEĞİ GECcedilEN BUumlTUumlN HERKESE TEŞEKUumlRLERİMİZİ SUNUYORUZhellip
5 ETKĠLENDĠKLERI DĠL Lisp ALGOL MDL 6 ETKILEDIĞI DIL Common Lisp EuLisp JavaScript R Ruby Dylan
Lua Hop Racket 7 DOSYA UZANTISIscm ss 8 PARADĠKMASI fonksiyonel meta yordamsal
Scheme dili fonksiyonel bir dildir
Nesneye dair hiccedil bir Ģey yoktur Yorumlayıcı tarafından yorumlanan
fonksiyonel bir dildir
Yani programlar matematiksel fonksiyonlar tarafından yapılır
Fonksiyonların aldıkları girdi ve ccedilıktı sabittir
Programa girilen değere goumlre fonksiyonda bir değiĢiklik yapmadan
fonksiyonu aynen uygular Atama deyimleri bulunmaz
DeğiĢken değerleri bir defa atanır ve bir daha değiĢmez Fonksiyonel
programların artılarından biri bir fonksiyonu ccedilağırmanın kendi sonucunu
geriye doumlnduumlrmekten baĢka bir sonucu olmadığından bug oluĢumunu
engeller
EDİTOumlR KURULUMU
Bu linkten ldquo httpracket-langorgdownload ldquo editoumlruuml indirilebilir
Next diyoruz
Next diyoruz
Install diyoruz
Bu boumlluumlm bittikten sonra editoumlruumlmuumlzuumln kurulumu tamamlanmış olacaktır
EDİTOumlR TANITIMI
FILE MENUumlSUuml
mdashNEW yeni sayfa accedilar
mdashNEW TAB yeni bir sekme accedilar
mdashOPEN oumlnceden yapılmıĢ dosyayı accedilar
mdashOPEN RECENT en son accedilılmıĢ olan sayfayı accedilar
mdashINSTALL PLT FILE buna tıkladığımızda WEB ve FILE diye 2 kısım
karsımıza ccedilıkar
WEB de web den dosya yuumlklemek iccedilin (URL) giriyoruz
FILE da ise bilgisayarda bulunan herhangi bir DrScheme projesini accedilmak
iccedilin kullanıyoruz
mdashREVERT projeyi en son derlenmiĢ haline doumlnduumlruumlr Yani derlendikten
sonraki değiĢiklikleri siler
mdashSAVE DEFINITIONS projeyi kaydeder
mdash SAVE DEFINITIONS AS projeyi farklı isimde kaydetmek iccedilin kullanılır
mdashPRINT DEFINITIONS projeyi yazıcıdan ccedilıkarmak iccedilin kullanılır
mdashPRINT INTERACTION projenin ccedilıktısını yazıcıdan ccedilıkarmak iccedilin kullanılır
EDIT MENUumlSUuml
mdashUNDO (ctrl+z) geri alma goumlrevini yapar
mdashREDO (ctrl+y) ileri alma goumlrevini yapar
mdashOVERWRITE MODE C dilindeki INSERT gibi yeni harfi eski harfin uumlzerine
yazar Bir ya da birkaccedil harfi değiĢtirir(Biz uumlzerine gelip tıkladıktan sonra
yazarken değiĢtirir)
mdashWRAP TEXT kod satırları uzadığında kodlar otomatik alt satıra geccediler
mdashFIND ekranda yazılanları değiĢtirmek iccedilin kullanılır FIND a tıkladığımızda alt
kısımda ccedilıkan alana değiĢtirmek istediğimiz yeni değeri yazdığımızda editoumlr
bulduğu kelimeleri yuvarlak iccediline alınır
mdashREPLACE değiĢtirmek istenen yeri yazıyoruz(Ccedilıkan iki kutudan birine nereyi
değiĢtireceğimizi diğerine neyle değiĢtireceğimizi yazarız)
mdashHĠDE REPLACE atadığımız yeni değeri gizler
mdashKEY BINDING anahtar kelimeler
mdashPREFERENCES buradan oumlzellikleri ayarlıyoruz Oumlrneğin
FONT SĠZE yazının buumlyuumlkluumlğuumlnuuml
FONT NAME yazının ismini
COLORS da Background Color arka plan rengini ayarlar
SCHEME symbol keyword string vb yazının rengi tipi koyuluğunu
değiĢtirmek iccedilin kullanılır
FIND CASE SENSTĠVE kuumlccediluumlk buumlyuumlk harfe duyarlı olup olmadığını
goumlsterir Ġstersek ayarlayabiliriz
VIEW MENUumlSUuml
mdashHIDE DEFINITION kodların yazıldığı ekranı gizler(uumlst kısım)
mdashHIDE INTERACTION ccedilıktıların yazılı olduğu ekranı gizler(alt kısım)
mdashUSE HORIZONTAL LAYOUT editoumlruumlmuumlzdeki alttaki kısmı yanda goumlsterir
mdashSHOW PROGRAM COUNTER definition kısmındaki kodların toplu
goumlruumlnduumlğuuml ekranı getirir
mdashTOOLBAR
mdash TOOLBAR ON LEFT toolbarı solda goumlsterir mdash TOOLBAR ON RIGHT toolbarı sağda goumlsterir mdash TOOLBAR ON TOP toolbarı tepede goumlsterir mdash TOOLBAR ON HIDDEN toolbarı tamamen saklar mdashSHOW LĠNE NUMBERS sol tarafta satırlara sıra no verir
mdashSPLIT ekranın uumlst kısmını 2 ye ayırır(alt alta)
mdashCOLLAPSE ekranı eski haline getirir
LANGUAGE MENUumlSUuml
mdashCHOOSE LANGUAGE dil seccedilimi yapmayı sağlar Kullanıcı seviyesine goumlre dili seccediler Bazı
komutlar her dilde ccedilalıĢmamaktadır Oumlrnegin
BEGINNING STUDENT seccedilildiğinde Display komutu ccedilalıĢmaz
PRETTY BIG seccedilildiğinde ccedilalıĢır
RACKET MENUumlSUuml
mdashRUN programı ccedilalıĢtırır
mdashLIMIT MEMORY -unlimited
mdashlimited
Bu oumlzellikle varsayılan limit(128mb) olan bu hafızayı
değiĢtirebiliyoruz Boumlylece proje bize lazım olan hafıza kadar yer tutuyor
fazlasını tutmuyor
mdashCREATE EXECUTABLE Exe oluĢturmamızı sağlar
mdashCOMMENT OUT WĠTH A BOX kutu iccedilinde yorum satırı oluĢturmamızı
sağlar
mdashCOMMENT OUT WĠTH SEMĠCOLONS ( ) noktalı virguumll kullanarak yorum
satırı oluĢturmamızı sağlar
INSERT MENUumlSUuml
mdashINSERT COMMENT BOX kutu iccedilinde yorum satırı eklemeyi sağlar
mdashINSERT IMAGE resim eklenir
mdashINSERT FRACTION kesirli sayı oluĢturmak iccedilin kullanılır
mdashCHECK SYNTAX yazım hatalarını kontrol eder
mdashMACRO STEPPER kodu satır ccedilalıĢtırarak ilerler C taki F11 tuĢu gibi
ccedilalıĢır
Editoumlr uumlzerinde ise
Sağ alttaki ccedilarpı alt ekranı kapatmamızı sağlar
Sağ alt koumlĢedeki sayılar imlecin bulunduğu satır ve suumltunu goumlsterir
Sol altta seccediltiğimiz dil yazılıdır Uumlzerine tıkladığımızda daha oumlnceden
kullandığımız dillerin listesi goumlruumlnuumlr
DOSYA İŞLEMLERİ
Open-input-file Okunacak dosyayı accedilar
Open-output-file Yazılacak dosyayı accedilarDosya oumlnceden oluĢturulmamıĢsa oluĢturur
Close-input-port Input dosyasını kapatır
Close-output-port Output dosyasını kapatır
Read-char Dosyadan bir karakter okuduktan sonra imleci diğer karaktere taĢır Peek-char read-charlsquodan farkı imleci taĢımaz
Read-string Belirtilen sayı kadar karakter okur
Read-line Satır okur
Write Dosyaya string ifadeyi tırnak iĢaretleriyle birlikte yazar
Display Dosyaya string ifadeyi tırnak iĢaretleri olmadan yazar
Write-string Dosyaya string ifadeyi tırnak iĢaretleri olmadan yazar ayrıca karakter saysını
alt ekranda goumlsterir
With-input-from-file with-output-to-file Dosya accedilma kapatma iĢlemini otomatik yapıp
verilen proseduumlruuml uygular
Oumlrnek kodlar
Dosyadan okuma
Dosyada Scheme is fun
Write with Schemelsquo yazılıdır
(define p (open-input-file testtxt)) (read p)
(read-line p)
(read-string 300 p)
(close-input-port p) Ccedilıktısı Scheme is funr
Write with Scheme
----------------------
(with-input-from-file testtxt
(lambda ()
(read) ))
Ccedilıktısı Scheme
Dosyaya yazma
(define y merhaba)
(define p (open-output-file testtxt))
(write y p)
(display y p)
(write ifade p )
(write-char k p)
(close-output-port p)
-------------------------
(with-output-to-file test2txt
(lambda ()
(display Hello world) ))
---------------------------
KULLANICI ETKİLEŞİMİ
Bu dilde fonksiyonlar değiĢkenlere değer olarak atanan veya fonksiyonlara
delil olarak geccedilirilebilir Schemelsquode Scheme kodunu oluĢturan ve
yorumlanmasını(interpretation) isteyen bir fonksiyon tanımlamak muumlmkuumlnduumlr
Bu muumlmkuumlnduumlr ccediluumlnkuuml yorumlayıcı(interpreter) kullanıcı tarafından
eriĢilebilen(user-available) bir fonksiyondur Fonksiyonel dillerin tasarımı
Matematiksel Fonksiyonlara dayalıdır
Kullanıcıya da yakın olan sağlam bir teorik temel fakat nispeten programların
koĢacağı makinelerin mimarileriyle ilgisizdir
Schemelsquoi ayrıca diğer dillerden ayıra en oumlnemli oumlzelliklerden biri de ccedilalıĢma
esnasında uygulamaya muumldahale edebilme iznini vermesidir Bu oumlzellik
sadece oumlnceden derlenmiĢ ve ağır plug-inler aracılığı ile geniĢletilen
uygulamalara kıyasla ccedilok daha buumlyuumlk bir avantaj
FONKSİYONLAR
Bu dilde fonksiyonlar birinci-sınıf varlıklardır(entities)
ndashĠfadelerin(expressions) değerleri ve listelerin elemanları olabilirler
ndashDeğiĢkenlere(variables) atanabilirler ve parametrelere geccedililebilirler
Scheme dilindeki formlar ikiye ayrılır
Temel Formlar define lambda if quote unquote unquote-splicing
quasiquote define-syntax let-syntax letrec-syntax syntax-rules set
( 5 4) sonuccedil olarak karĢımıza ccedilikacaktir
Ifadesi de yorum satırı haline getirir kodu
Ġf deyimini oumlrnekle accedilıklayalım
(If lsaquo expr rsaquo lsaquoexpr rsaquo lsaquoexpr rsaquo)
(If (= (+ 4 5) 9) t f)
Burada ilk verdiğimiz arguumlman (= (+ 4 5) 9) iĢleminin doğru olup
olmadığına bakar Eğer iĢlem doğruysa ccedilıktı olarak t yanlıĢsa f doumlner
Anlayacağınız uumlzere bu oumlzel durum proseduumlruuml koĢul gerektiren bir proseduumlr
bu durumda ilk verdiğimiz arguumlman da koĢulu belirleyen parccedila oluyor Oumlnce
o koĢulu inceleyen yorumlayıcı da daha sonra verdiğimiz diğer arguumlmanları
koĢula goumlre seccedilerek bize gereken ccedilıktıyı veriyor
Cond deyimi( cond[ltİfadegt ltİfadegt] )
Bir soruya dayalı alternatif cevapları seccedilmek istiyorsanız cond ifadesi kullanılır
ġart ifadesidir
Cond Ģeklinde koumlĢeli parantez maddeler dizisi iccedilerir
(Cond
((ltSıcaklık 50) Soğuk)
((gt Sıcaklık 90) Ccedilok sıcak )
(else Sorun yok))
Ayrıca else Scheme dilinde cond ifadesiyle kullanılır diğer dillerde olduğu gibi if
le değil Else ifadesi ise diğer koĢullar olmadığında else koĢulu olacaktır
Do ifadesi
(do ((i 0 (+ i 1))) ((gt i 2)) (display i) (newline))
Programın ccedilıktısı
0
1
2 dir Ġlk oumlnce i ye 0 atıyor ve i yi 1 er 1 er artırarak i 2 den buumlyuumlk olana
kadar doumlnduumlruumlyor display ile de ekrana yazdırıyornewline satırı ilede bir alt
satıra geccediliyor
While ifadesi
(While (koĢul ))
(Deyim1)
(Deyim2)
)
Let ifadesi
(let ((x 5)) ( x 2))
Ekran ccedilıktısı ise 10 olurLet yanındaki ilk koĢul ifadesinde değer ataması
yapılır ve diğer ifadede de matematiksel iĢlemi gerccedilekleĢtirir
Listeler
List fonksiyonu herhangi bir sayı alır ve değerlerini iccedileren bir liste doumlnduumlruumlr
gt(listKırmızı YeĢil Mavi)
(Kırmızı yeĢilmavi)
gt(list 1 2 3 4 5)
(1 2 3 4 5)
LIST
ndash Herhangi bir sayıda parametre alır elemanları bu parametreler olan bir liste
doumlnduumlruumlr
Ayrıca Bizim listelerde bulmak iccedilin uğraĢtığımız problemler iccedilin direk
fonksiyonlar var Mesela
first listenin ilk elemanını alır
Rest listenin ilk elemanı haricindekileri alır
gt (first (list 1 2 3 ))
1
gt(rest (list 1 2 3 ))
2 3
Listeler iccedilin bir oumlrnek daha
gt( list ( list 1 2 3 ) 5 (list a b c) )
((1 2 3) 5 (a b c))
Hello World Uygulaması
Programlamaya ilk baslayan herkesin yaptığı gibi bizde scheme dilinde
ekrana ―hello world yazdiralimScheme dilinde farkli seviyelerde farklı kodlar
kullanilirPretty Big de hemen hemen buumltuumln kodlar ccedilalıĢtığı iccedilin biz genelde bu
level ı kullaniyoruz
Display ―Hello World
(write Hello World )
―Hello World
Yukarı da goumlruumllen kodlar ccedilalıĢtırıldığında aynı ekran ccedilıktısına sahip
olurlarGoumlruumllduumlğuuml gibi ne noktalı virguumll nede fazla kelimeye gerek kalmıyor
Matematik Fonksiyonları
(Exp x) e^x in sonucunu doumlnduumlruumlr
(Log x) x sayısının logaritma değerini doumlnduumlruumlr
(sqrt x) x koumlkuumlnuumln karesini doumlnduumlruumlr
(max x1 x2) verilen listeden en buumlyuumlk sayıyı doumlnduumlruumlr
(min x1 x2) verilen listeden en kuku sayıyı doumlnduumlruumlr
(quotient x1 x2) x1x2 kesrinin boumlluumlmuumlnuuml doumlnduumlruumlr
(remian x1 x2) x1x2 kesrinin kalanini doumlnduumlruumlr
(modula x1 x2) x1 in x2 ye moduumlluuml sonucunu doumlnduumlruumlr
(gcm num1 num2 ) Verilen listenin en buumlyuumlk ortak boumlleni doumlnduumlruumlr
(lcm num1 num2 ) Verilen listenin en kuku ortak ccedilarpanı doumlnduumlruumlr
(Ceiling x) x ten kuku olmayan en kuku değeri doumlnduumlruumlr
( turn cate x) Mutlak değeri x in mutlak değerinden buumlyuumlk olmayan Xlsquo en
yakın değeri doumlnduumlruumlr
(round x) xe en yakın değere yuvarlıyor
İlişkisel Operatoumlrler
(=x 1) x 1 ise true doumlnduumlruumlr
(ltx y) x yden kuumlccediluumlkse true doumlnduumlruumlr
(gtx y) x y den buumlyuumlkse true doumlnduumlruumlr
(lt=x y) x yden kuku veya eĢitse true doumlnduumlruumlr
(gt=x y) x yden buumlyuumlk veya eĢitse true doumlnduumlruumlr
(eq x y) x ve y aynı ise true doumlnduumlruumlr
(equal x y) x ve y aynı yapıda olup aynı iccedileriğe sahipse true doumlnduumlruumlr
Tip Yuumlklemeleri
(procedure x)X fonksiyon ise true doumlnduumlruumlr
(null x) X boĢ bir liste ise true doumlnduumlruumlr
(zero x )X sıfır ise true doumlnduumlruumlr
(odd x) X tek ise true doumlnduumlruumlr
(even x) X tek ise true doumlnduumlruumlr
(symbolx) X tek ise true doumlnduumlruumlr
Asal Sayı Bulma Programı
(Define (divides m n)
(Cond
[(zero m) true]
[(amplt m n) false]
[else (divides (- m n) n)]
))
(Define (check-prime prime-cand divisor)
(cond
[(= 1 divisor) true]
[(divides prime-cand divisor) false]
[else (check-prime prime-cand (sub1 divisor))]))
(define (prime x)
(cond
[(= x 0) false]
[(= x 1) false]
[else (check-prime x (- x 1))]
))
KAYNAKLAR
wwwbilgisayarkavramlaricom
httpe-bergicom2010OcakScheme
httpwwwhtdporg2003ndash09ndash26Bookcurriculum-Z-H-1html
httptranslategooglecomtrtranslatehl=tramplangpair=en7Ctrampu=http httpprogramming-musingsorg20091223scheme-lectures-mostly httptranslategooglecomtrtranslatehl=trampsl=enampu=http3A2F2Fw
httpblogyollucomtagscheme
httpwwwschemecomtspl4 httpracket-langorgdownload
PROJE KONUSU SCHEME DİLİNİN OZELİKLERİNİ TAŞIYAN VE BU PDF DE
ANLATILAN KONULAR İLGİLİ 10 SORU HAZIRLANIP BUNLARIN CEVAPLARINI
KULANICIDAN İSTENİLMESİ
PROJEDE KULANILANLAR
LİSTE
FONKSİYON
KOŞUL CUumlMLESİ
DEĞER ATAMALARI
PROJE KODU
(define k 0)
(define doğrular 0)
(define yanlışlar 0)
sorular
(define a 1soru Lamda nedir)
(define A1 1 isimsiz fonksiyonları belirler)
(define B1 2 değer ataması yapar)
(define C1 3 pointer goumlrevi yapar)
(define b 2soru hangisi aritmetik fonksiyon değildir)
(define A2 1 SQRT )
(define B2 2 MIN )
(define C2 3 QUOTE )
(define c 3soru=list kulanımı nasıldır)
(define A3 (1 LIST (A) (B) (C) (D)))
(define B3 (2 LIST A B C D) )
(define C3 (3 LIST A B C D) )
(define d 4soru=equalsimp ne demek)
(define A4 1 iki basit liste alır ve eşitliğini kontrol eder)
(define B4 2 listeleri birbirine atar)
(define C4 3 listeleri eşitler)
(define e1 5soru=append ne işe yarar)
(define A5 1 İki listeyi peş peşe ekler)
(define B5 2 iki listeyi ccedilıkarır)
(define C5 3 iki listeyi ccedilarpar)
(define f 6soru set isimlere değer atar doğrumudur)
(define A6 1 doğru)
(define B6 2 yanlis)
doğru cevap listesi
(define DListe (list 1 1 1 2 3 1) )
şıkları yazdırma
(define (Cevaplar cevapListesi)
( cond [(null cevapListesi) 0]
[else (Cevaplar (rest cevapListesi))
(display (first cevapListesi))
(display n)
]))
doğru yanlış kontroluuml
(define kon
(lambda (k FDL)
(cond ((= k FDL) (display Tebrikler )nn)(set dogrular (+ 1 dogrular)))
else ( display Maalesef olmadı (nn)(set yanlislar (+ 1 yanlislar))])))
soru ve şıkları yazdırıp cevap kontroluumlnuuml ccedilağırma
(define (Sorular soruListesi cevpListesi DListesi )
( cond [(null soruListesi) 0]
[else
(Sorular (rest soruListesi) (rest cevpListesi) (rest DListesi ))
(display (first soruListesi))
(display n)
(Cevaplar (first cevpListesi)) (set k (read)) (kon k (first DListesi)) ]))
şık listesi
(define CListe (list(list B6 A6) (list C5 B5 A5) (list C4 B4 A4) (list C3 B3 A3) (list C2 B2
A2)(list C1 B1 A1)))
Sorular fonksiyonunu ccedilağırma
(Sorular (list f e1 d c b a) CListe DListe )
yapılan doğru ve yanlış sayısını goumlsterme
(display Doğru cevap sayısı )
dogrular
(display Yanlış cevap sayısı )
yanlislar
EMEĞİ GECcedilEN BUumlTUumlN HERKESE TEŞEKUumlRLERİMİZİ SUNUYORUZhellip
EDİTOumlR KURULUMU
Bu linkten ldquo httpracket-langorgdownload ldquo editoumlruuml indirilebilir
Next diyoruz
Next diyoruz
Install diyoruz
Bu boumlluumlm bittikten sonra editoumlruumlmuumlzuumln kurulumu tamamlanmış olacaktır
EDİTOumlR TANITIMI
FILE MENUumlSUuml
mdashNEW yeni sayfa accedilar
mdashNEW TAB yeni bir sekme accedilar
mdashOPEN oumlnceden yapılmıĢ dosyayı accedilar
mdashOPEN RECENT en son accedilılmıĢ olan sayfayı accedilar
mdashINSTALL PLT FILE buna tıkladığımızda WEB ve FILE diye 2 kısım
karsımıza ccedilıkar
WEB de web den dosya yuumlklemek iccedilin (URL) giriyoruz
FILE da ise bilgisayarda bulunan herhangi bir DrScheme projesini accedilmak
iccedilin kullanıyoruz
mdashREVERT projeyi en son derlenmiĢ haline doumlnduumlruumlr Yani derlendikten
sonraki değiĢiklikleri siler
mdashSAVE DEFINITIONS projeyi kaydeder
mdash SAVE DEFINITIONS AS projeyi farklı isimde kaydetmek iccedilin kullanılır
mdashPRINT DEFINITIONS projeyi yazıcıdan ccedilıkarmak iccedilin kullanılır
mdashPRINT INTERACTION projenin ccedilıktısını yazıcıdan ccedilıkarmak iccedilin kullanılır
EDIT MENUumlSUuml
mdashUNDO (ctrl+z) geri alma goumlrevini yapar
mdashREDO (ctrl+y) ileri alma goumlrevini yapar
mdashOVERWRITE MODE C dilindeki INSERT gibi yeni harfi eski harfin uumlzerine
yazar Bir ya da birkaccedil harfi değiĢtirir(Biz uumlzerine gelip tıkladıktan sonra
yazarken değiĢtirir)
mdashWRAP TEXT kod satırları uzadığında kodlar otomatik alt satıra geccediler
mdashFIND ekranda yazılanları değiĢtirmek iccedilin kullanılır FIND a tıkladığımızda alt
kısımda ccedilıkan alana değiĢtirmek istediğimiz yeni değeri yazdığımızda editoumlr
bulduğu kelimeleri yuvarlak iccediline alınır
mdashREPLACE değiĢtirmek istenen yeri yazıyoruz(Ccedilıkan iki kutudan birine nereyi
değiĢtireceğimizi diğerine neyle değiĢtireceğimizi yazarız)
mdashHĠDE REPLACE atadığımız yeni değeri gizler
mdashKEY BINDING anahtar kelimeler
mdashPREFERENCES buradan oumlzellikleri ayarlıyoruz Oumlrneğin
FONT SĠZE yazının buumlyuumlkluumlğuumlnuuml
FONT NAME yazının ismini
COLORS da Background Color arka plan rengini ayarlar
SCHEME symbol keyword string vb yazının rengi tipi koyuluğunu
değiĢtirmek iccedilin kullanılır
FIND CASE SENSTĠVE kuumlccediluumlk buumlyuumlk harfe duyarlı olup olmadığını
goumlsterir Ġstersek ayarlayabiliriz
VIEW MENUumlSUuml
mdashHIDE DEFINITION kodların yazıldığı ekranı gizler(uumlst kısım)
mdashHIDE INTERACTION ccedilıktıların yazılı olduğu ekranı gizler(alt kısım)
mdashUSE HORIZONTAL LAYOUT editoumlruumlmuumlzdeki alttaki kısmı yanda goumlsterir
mdashSHOW PROGRAM COUNTER definition kısmındaki kodların toplu
goumlruumlnduumlğuuml ekranı getirir
mdashTOOLBAR
mdash TOOLBAR ON LEFT toolbarı solda goumlsterir mdash TOOLBAR ON RIGHT toolbarı sağda goumlsterir mdash TOOLBAR ON TOP toolbarı tepede goumlsterir mdash TOOLBAR ON HIDDEN toolbarı tamamen saklar mdashSHOW LĠNE NUMBERS sol tarafta satırlara sıra no verir
mdashSPLIT ekranın uumlst kısmını 2 ye ayırır(alt alta)
mdashCOLLAPSE ekranı eski haline getirir
LANGUAGE MENUumlSUuml
mdashCHOOSE LANGUAGE dil seccedilimi yapmayı sağlar Kullanıcı seviyesine goumlre dili seccediler Bazı
komutlar her dilde ccedilalıĢmamaktadır Oumlrnegin
BEGINNING STUDENT seccedilildiğinde Display komutu ccedilalıĢmaz
PRETTY BIG seccedilildiğinde ccedilalıĢır
RACKET MENUumlSUuml
mdashRUN programı ccedilalıĢtırır
mdashLIMIT MEMORY -unlimited
mdashlimited
Bu oumlzellikle varsayılan limit(128mb) olan bu hafızayı
değiĢtirebiliyoruz Boumlylece proje bize lazım olan hafıza kadar yer tutuyor
fazlasını tutmuyor
mdashCREATE EXECUTABLE Exe oluĢturmamızı sağlar
mdashCOMMENT OUT WĠTH A BOX kutu iccedilinde yorum satırı oluĢturmamızı
sağlar
mdashCOMMENT OUT WĠTH SEMĠCOLONS ( ) noktalı virguumll kullanarak yorum
satırı oluĢturmamızı sağlar
INSERT MENUumlSUuml
mdashINSERT COMMENT BOX kutu iccedilinde yorum satırı eklemeyi sağlar
mdashINSERT IMAGE resim eklenir
mdashINSERT FRACTION kesirli sayı oluĢturmak iccedilin kullanılır
mdashCHECK SYNTAX yazım hatalarını kontrol eder
mdashMACRO STEPPER kodu satır ccedilalıĢtırarak ilerler C taki F11 tuĢu gibi
ccedilalıĢır
Editoumlr uumlzerinde ise
Sağ alttaki ccedilarpı alt ekranı kapatmamızı sağlar
Sağ alt koumlĢedeki sayılar imlecin bulunduğu satır ve suumltunu goumlsterir
Sol altta seccediltiğimiz dil yazılıdır Uumlzerine tıkladığımızda daha oumlnceden
kullandığımız dillerin listesi goumlruumlnuumlr
DOSYA İŞLEMLERİ
Open-input-file Okunacak dosyayı accedilar
Open-output-file Yazılacak dosyayı accedilarDosya oumlnceden oluĢturulmamıĢsa oluĢturur
Close-input-port Input dosyasını kapatır
Close-output-port Output dosyasını kapatır
Read-char Dosyadan bir karakter okuduktan sonra imleci diğer karaktere taĢır Peek-char read-charlsquodan farkı imleci taĢımaz
Read-string Belirtilen sayı kadar karakter okur
Read-line Satır okur
Write Dosyaya string ifadeyi tırnak iĢaretleriyle birlikte yazar
Display Dosyaya string ifadeyi tırnak iĢaretleri olmadan yazar
Write-string Dosyaya string ifadeyi tırnak iĢaretleri olmadan yazar ayrıca karakter saysını
alt ekranda goumlsterir
With-input-from-file with-output-to-file Dosya accedilma kapatma iĢlemini otomatik yapıp
verilen proseduumlruuml uygular
Oumlrnek kodlar
Dosyadan okuma
Dosyada Scheme is fun
Write with Schemelsquo yazılıdır
(define p (open-input-file testtxt)) (read p)
(read-line p)
(read-string 300 p)
(close-input-port p) Ccedilıktısı Scheme is funr
Write with Scheme
----------------------
(with-input-from-file testtxt
(lambda ()
(read) ))
Ccedilıktısı Scheme
Dosyaya yazma
(define y merhaba)
(define p (open-output-file testtxt))
(write y p)
(display y p)
(write ifade p )
(write-char k p)
(close-output-port p)
-------------------------
(with-output-to-file test2txt
(lambda ()
(display Hello world) ))
---------------------------
KULLANICI ETKİLEŞİMİ
Bu dilde fonksiyonlar değiĢkenlere değer olarak atanan veya fonksiyonlara
delil olarak geccedilirilebilir Schemelsquode Scheme kodunu oluĢturan ve
yorumlanmasını(interpretation) isteyen bir fonksiyon tanımlamak muumlmkuumlnduumlr
Bu muumlmkuumlnduumlr ccediluumlnkuuml yorumlayıcı(interpreter) kullanıcı tarafından
eriĢilebilen(user-available) bir fonksiyondur Fonksiyonel dillerin tasarımı
Matematiksel Fonksiyonlara dayalıdır
Kullanıcıya da yakın olan sağlam bir teorik temel fakat nispeten programların
koĢacağı makinelerin mimarileriyle ilgisizdir
Schemelsquoi ayrıca diğer dillerden ayıra en oumlnemli oumlzelliklerden biri de ccedilalıĢma
esnasında uygulamaya muumldahale edebilme iznini vermesidir Bu oumlzellik
sadece oumlnceden derlenmiĢ ve ağır plug-inler aracılığı ile geniĢletilen
uygulamalara kıyasla ccedilok daha buumlyuumlk bir avantaj
FONKSİYONLAR
Bu dilde fonksiyonlar birinci-sınıf varlıklardır(entities)
ndashĠfadelerin(expressions) değerleri ve listelerin elemanları olabilirler
ndashDeğiĢkenlere(variables) atanabilirler ve parametrelere geccedililebilirler
Scheme dilindeki formlar ikiye ayrılır
Temel Formlar define lambda if quote unquote unquote-splicing
quasiquote define-syntax let-syntax letrec-syntax syntax-rules set
( 5 4) sonuccedil olarak karĢımıza ccedilikacaktir
Ifadesi de yorum satırı haline getirir kodu
Ġf deyimini oumlrnekle accedilıklayalım
(If lsaquo expr rsaquo lsaquoexpr rsaquo lsaquoexpr rsaquo)
(If (= (+ 4 5) 9) t f)
Burada ilk verdiğimiz arguumlman (= (+ 4 5) 9) iĢleminin doğru olup
olmadığına bakar Eğer iĢlem doğruysa ccedilıktı olarak t yanlıĢsa f doumlner
Anlayacağınız uumlzere bu oumlzel durum proseduumlruuml koĢul gerektiren bir proseduumlr
bu durumda ilk verdiğimiz arguumlman da koĢulu belirleyen parccedila oluyor Oumlnce
o koĢulu inceleyen yorumlayıcı da daha sonra verdiğimiz diğer arguumlmanları
koĢula goumlre seccedilerek bize gereken ccedilıktıyı veriyor
Cond deyimi( cond[ltİfadegt ltİfadegt] )
Bir soruya dayalı alternatif cevapları seccedilmek istiyorsanız cond ifadesi kullanılır
ġart ifadesidir
Cond Ģeklinde koumlĢeli parantez maddeler dizisi iccedilerir
(Cond
((ltSıcaklık 50) Soğuk)
((gt Sıcaklık 90) Ccedilok sıcak )
(else Sorun yok))
Ayrıca else Scheme dilinde cond ifadesiyle kullanılır diğer dillerde olduğu gibi if
le değil Else ifadesi ise diğer koĢullar olmadığında else koĢulu olacaktır
Do ifadesi
(do ((i 0 (+ i 1))) ((gt i 2)) (display i) (newline))
Programın ccedilıktısı
0
1
2 dir Ġlk oumlnce i ye 0 atıyor ve i yi 1 er 1 er artırarak i 2 den buumlyuumlk olana
kadar doumlnduumlruumlyor display ile de ekrana yazdırıyornewline satırı ilede bir alt
satıra geccediliyor
While ifadesi
(While (koĢul ))
(Deyim1)
(Deyim2)
)
Let ifadesi
(let ((x 5)) ( x 2))
Ekran ccedilıktısı ise 10 olurLet yanındaki ilk koĢul ifadesinde değer ataması
yapılır ve diğer ifadede de matematiksel iĢlemi gerccedilekleĢtirir
Listeler
List fonksiyonu herhangi bir sayı alır ve değerlerini iccedileren bir liste doumlnduumlruumlr
gt(listKırmızı YeĢil Mavi)
(Kırmızı yeĢilmavi)
gt(list 1 2 3 4 5)
(1 2 3 4 5)
LIST
ndash Herhangi bir sayıda parametre alır elemanları bu parametreler olan bir liste
doumlnduumlruumlr
Ayrıca Bizim listelerde bulmak iccedilin uğraĢtığımız problemler iccedilin direk
fonksiyonlar var Mesela
first listenin ilk elemanını alır
Rest listenin ilk elemanı haricindekileri alır
gt (first (list 1 2 3 ))
1
gt(rest (list 1 2 3 ))
2 3
Listeler iccedilin bir oumlrnek daha
gt( list ( list 1 2 3 ) 5 (list a b c) )
((1 2 3) 5 (a b c))
Hello World Uygulaması
Programlamaya ilk baslayan herkesin yaptığı gibi bizde scheme dilinde
ekrana ―hello world yazdiralimScheme dilinde farkli seviyelerde farklı kodlar
kullanilirPretty Big de hemen hemen buumltuumln kodlar ccedilalıĢtığı iccedilin biz genelde bu
level ı kullaniyoruz
Display ―Hello World
(write Hello World )
―Hello World
Yukarı da goumlruumllen kodlar ccedilalıĢtırıldığında aynı ekran ccedilıktısına sahip
olurlarGoumlruumllduumlğuuml gibi ne noktalı virguumll nede fazla kelimeye gerek kalmıyor
Matematik Fonksiyonları
(Exp x) e^x in sonucunu doumlnduumlruumlr
(Log x) x sayısının logaritma değerini doumlnduumlruumlr
(sqrt x) x koumlkuumlnuumln karesini doumlnduumlruumlr
(max x1 x2) verilen listeden en buumlyuumlk sayıyı doumlnduumlruumlr
(min x1 x2) verilen listeden en kuku sayıyı doumlnduumlruumlr
(quotient x1 x2) x1x2 kesrinin boumlluumlmuumlnuuml doumlnduumlruumlr
(remian x1 x2) x1x2 kesrinin kalanini doumlnduumlruumlr
(modula x1 x2) x1 in x2 ye moduumlluuml sonucunu doumlnduumlruumlr
(gcm num1 num2 ) Verilen listenin en buumlyuumlk ortak boumlleni doumlnduumlruumlr
(lcm num1 num2 ) Verilen listenin en kuku ortak ccedilarpanı doumlnduumlruumlr
(Ceiling x) x ten kuku olmayan en kuku değeri doumlnduumlruumlr
( turn cate x) Mutlak değeri x in mutlak değerinden buumlyuumlk olmayan Xlsquo en
yakın değeri doumlnduumlruumlr
(round x) xe en yakın değere yuvarlıyor
İlişkisel Operatoumlrler
(=x 1) x 1 ise true doumlnduumlruumlr
(ltx y) x yden kuumlccediluumlkse true doumlnduumlruumlr
(gtx y) x y den buumlyuumlkse true doumlnduumlruumlr
(lt=x y) x yden kuku veya eĢitse true doumlnduumlruumlr
(gt=x y) x yden buumlyuumlk veya eĢitse true doumlnduumlruumlr
(eq x y) x ve y aynı ise true doumlnduumlruumlr
(equal x y) x ve y aynı yapıda olup aynı iccedileriğe sahipse true doumlnduumlruumlr
Tip Yuumlklemeleri
(procedure x)X fonksiyon ise true doumlnduumlruumlr
(null x) X boĢ bir liste ise true doumlnduumlruumlr
(zero x )X sıfır ise true doumlnduumlruumlr
(odd x) X tek ise true doumlnduumlruumlr
(even x) X tek ise true doumlnduumlruumlr
(symbolx) X tek ise true doumlnduumlruumlr
Asal Sayı Bulma Programı
(Define (divides m n)
(Cond
[(zero m) true]
[(amplt m n) false]
[else (divides (- m n) n)]
))
(Define (check-prime prime-cand divisor)
(cond
[(= 1 divisor) true]
[(divides prime-cand divisor) false]
[else (check-prime prime-cand (sub1 divisor))]))
(define (prime x)
(cond
[(= x 0) false]
[(= x 1) false]
[else (check-prime x (- x 1))]
))
KAYNAKLAR
wwwbilgisayarkavramlaricom
httpe-bergicom2010OcakScheme
httpwwwhtdporg2003ndash09ndash26Bookcurriculum-Z-H-1html
httptranslategooglecomtrtranslatehl=tramplangpair=en7Ctrampu=http httpprogramming-musingsorg20091223scheme-lectures-mostly httptranslategooglecomtrtranslatehl=trampsl=enampu=http3A2F2Fw
httpblogyollucomtagscheme
httpwwwschemecomtspl4 httpracket-langorgdownload
PROJE KONUSU SCHEME DİLİNİN OZELİKLERİNİ TAŞIYAN VE BU PDF DE
ANLATILAN KONULAR İLGİLİ 10 SORU HAZIRLANIP BUNLARIN CEVAPLARINI
KULANICIDAN İSTENİLMESİ
PROJEDE KULANILANLAR
LİSTE
FONKSİYON
KOŞUL CUumlMLESİ
DEĞER ATAMALARI
PROJE KODU
(define k 0)
(define doğrular 0)
(define yanlışlar 0)
sorular
(define a 1soru Lamda nedir)
(define A1 1 isimsiz fonksiyonları belirler)
(define B1 2 değer ataması yapar)
(define C1 3 pointer goumlrevi yapar)
(define b 2soru hangisi aritmetik fonksiyon değildir)
(define A2 1 SQRT )
(define B2 2 MIN )
(define C2 3 QUOTE )
(define c 3soru=list kulanımı nasıldır)
(define A3 (1 LIST (A) (B) (C) (D)))
(define B3 (2 LIST A B C D) )
(define C3 (3 LIST A B C D) )
(define d 4soru=equalsimp ne demek)
(define A4 1 iki basit liste alır ve eşitliğini kontrol eder)
(define B4 2 listeleri birbirine atar)
(define C4 3 listeleri eşitler)
(define e1 5soru=append ne işe yarar)
(define A5 1 İki listeyi peş peşe ekler)
(define B5 2 iki listeyi ccedilıkarır)
(define C5 3 iki listeyi ccedilarpar)
(define f 6soru set isimlere değer atar doğrumudur)
(define A6 1 doğru)
(define B6 2 yanlis)
doğru cevap listesi
(define DListe (list 1 1 1 2 3 1) )
şıkları yazdırma
(define (Cevaplar cevapListesi)
( cond [(null cevapListesi) 0]
[else (Cevaplar (rest cevapListesi))
(display (first cevapListesi))
(display n)
]))
doğru yanlış kontroluuml
(define kon
(lambda (k FDL)
(cond ((= k FDL) (display Tebrikler )nn)(set dogrular (+ 1 dogrular)))
else ( display Maalesef olmadı (nn)(set yanlislar (+ 1 yanlislar))])))
soru ve şıkları yazdırıp cevap kontroluumlnuuml ccedilağırma
(define (Sorular soruListesi cevpListesi DListesi )
( cond [(null soruListesi) 0]
[else
(Sorular (rest soruListesi) (rest cevpListesi) (rest DListesi ))
(display (first soruListesi))
(display n)
(Cevaplar (first cevpListesi)) (set k (read)) (kon k (first DListesi)) ]))
şık listesi
(define CListe (list(list B6 A6) (list C5 B5 A5) (list C4 B4 A4) (list C3 B3 A3) (list C2 B2
A2)(list C1 B1 A1)))
Sorular fonksiyonunu ccedilağırma
(Sorular (list f e1 d c b a) CListe DListe )
yapılan doğru ve yanlış sayısını goumlsterme
(display Doğru cevap sayısı )
dogrular
(display Yanlış cevap sayısı )
yanlislar
EMEĞİ GECcedilEN BUumlTUumlN HERKESE TEŞEKUumlRLERİMİZİ SUNUYORUZhellip
Install diyoruz
Bu boumlluumlm bittikten sonra editoumlruumlmuumlzuumln kurulumu tamamlanmış olacaktır
EDİTOumlR TANITIMI
FILE MENUumlSUuml
mdashNEW yeni sayfa accedilar
mdashNEW TAB yeni bir sekme accedilar
mdashOPEN oumlnceden yapılmıĢ dosyayı accedilar
mdashOPEN RECENT en son accedilılmıĢ olan sayfayı accedilar
mdashINSTALL PLT FILE buna tıkladığımızda WEB ve FILE diye 2 kısım
karsımıza ccedilıkar
WEB de web den dosya yuumlklemek iccedilin (URL) giriyoruz
FILE da ise bilgisayarda bulunan herhangi bir DrScheme projesini accedilmak
iccedilin kullanıyoruz
mdashREVERT projeyi en son derlenmiĢ haline doumlnduumlruumlr Yani derlendikten
sonraki değiĢiklikleri siler
mdashSAVE DEFINITIONS projeyi kaydeder
mdash SAVE DEFINITIONS AS projeyi farklı isimde kaydetmek iccedilin kullanılır
mdashPRINT DEFINITIONS projeyi yazıcıdan ccedilıkarmak iccedilin kullanılır
mdashPRINT INTERACTION projenin ccedilıktısını yazıcıdan ccedilıkarmak iccedilin kullanılır
EDIT MENUumlSUuml
mdashUNDO (ctrl+z) geri alma goumlrevini yapar
mdashREDO (ctrl+y) ileri alma goumlrevini yapar
mdashOVERWRITE MODE C dilindeki INSERT gibi yeni harfi eski harfin uumlzerine
yazar Bir ya da birkaccedil harfi değiĢtirir(Biz uumlzerine gelip tıkladıktan sonra
yazarken değiĢtirir)
mdashWRAP TEXT kod satırları uzadığında kodlar otomatik alt satıra geccediler
mdashFIND ekranda yazılanları değiĢtirmek iccedilin kullanılır FIND a tıkladığımızda alt
kısımda ccedilıkan alana değiĢtirmek istediğimiz yeni değeri yazdığımızda editoumlr
bulduğu kelimeleri yuvarlak iccediline alınır
mdashREPLACE değiĢtirmek istenen yeri yazıyoruz(Ccedilıkan iki kutudan birine nereyi
değiĢtireceğimizi diğerine neyle değiĢtireceğimizi yazarız)
mdashHĠDE REPLACE atadığımız yeni değeri gizler
mdashKEY BINDING anahtar kelimeler
mdashPREFERENCES buradan oumlzellikleri ayarlıyoruz Oumlrneğin
FONT SĠZE yazının buumlyuumlkluumlğuumlnuuml
FONT NAME yazının ismini
COLORS da Background Color arka plan rengini ayarlar
SCHEME symbol keyword string vb yazının rengi tipi koyuluğunu
değiĢtirmek iccedilin kullanılır
FIND CASE SENSTĠVE kuumlccediluumlk buumlyuumlk harfe duyarlı olup olmadığını
goumlsterir Ġstersek ayarlayabiliriz
VIEW MENUumlSUuml
mdashHIDE DEFINITION kodların yazıldığı ekranı gizler(uumlst kısım)
mdashHIDE INTERACTION ccedilıktıların yazılı olduğu ekranı gizler(alt kısım)
mdashUSE HORIZONTAL LAYOUT editoumlruumlmuumlzdeki alttaki kısmı yanda goumlsterir
mdashSHOW PROGRAM COUNTER definition kısmındaki kodların toplu
goumlruumlnduumlğuuml ekranı getirir
mdashTOOLBAR
mdash TOOLBAR ON LEFT toolbarı solda goumlsterir mdash TOOLBAR ON RIGHT toolbarı sağda goumlsterir mdash TOOLBAR ON TOP toolbarı tepede goumlsterir mdash TOOLBAR ON HIDDEN toolbarı tamamen saklar mdashSHOW LĠNE NUMBERS sol tarafta satırlara sıra no verir
mdashSPLIT ekranın uumlst kısmını 2 ye ayırır(alt alta)
mdashCOLLAPSE ekranı eski haline getirir
LANGUAGE MENUumlSUuml
mdashCHOOSE LANGUAGE dil seccedilimi yapmayı sağlar Kullanıcı seviyesine goumlre dili seccediler Bazı
komutlar her dilde ccedilalıĢmamaktadır Oumlrnegin
BEGINNING STUDENT seccedilildiğinde Display komutu ccedilalıĢmaz
PRETTY BIG seccedilildiğinde ccedilalıĢır
RACKET MENUumlSUuml
mdashRUN programı ccedilalıĢtırır
mdashLIMIT MEMORY -unlimited
mdashlimited
Bu oumlzellikle varsayılan limit(128mb) olan bu hafızayı
değiĢtirebiliyoruz Boumlylece proje bize lazım olan hafıza kadar yer tutuyor
fazlasını tutmuyor
mdashCREATE EXECUTABLE Exe oluĢturmamızı sağlar
mdashCOMMENT OUT WĠTH A BOX kutu iccedilinde yorum satırı oluĢturmamızı
sağlar
mdashCOMMENT OUT WĠTH SEMĠCOLONS ( ) noktalı virguumll kullanarak yorum
satırı oluĢturmamızı sağlar
INSERT MENUumlSUuml
mdashINSERT COMMENT BOX kutu iccedilinde yorum satırı eklemeyi sağlar
mdashINSERT IMAGE resim eklenir
mdashINSERT FRACTION kesirli sayı oluĢturmak iccedilin kullanılır
mdashCHECK SYNTAX yazım hatalarını kontrol eder
mdashMACRO STEPPER kodu satır ccedilalıĢtırarak ilerler C taki F11 tuĢu gibi
ccedilalıĢır
Editoumlr uumlzerinde ise
Sağ alttaki ccedilarpı alt ekranı kapatmamızı sağlar
Sağ alt koumlĢedeki sayılar imlecin bulunduğu satır ve suumltunu goumlsterir
Sol altta seccediltiğimiz dil yazılıdır Uumlzerine tıkladığımızda daha oumlnceden
kullandığımız dillerin listesi goumlruumlnuumlr
DOSYA İŞLEMLERİ
Open-input-file Okunacak dosyayı accedilar
Open-output-file Yazılacak dosyayı accedilarDosya oumlnceden oluĢturulmamıĢsa oluĢturur
Close-input-port Input dosyasını kapatır
Close-output-port Output dosyasını kapatır
Read-char Dosyadan bir karakter okuduktan sonra imleci diğer karaktere taĢır Peek-char read-charlsquodan farkı imleci taĢımaz
Read-string Belirtilen sayı kadar karakter okur
Read-line Satır okur
Write Dosyaya string ifadeyi tırnak iĢaretleriyle birlikte yazar
Display Dosyaya string ifadeyi tırnak iĢaretleri olmadan yazar
Write-string Dosyaya string ifadeyi tırnak iĢaretleri olmadan yazar ayrıca karakter saysını
alt ekranda goumlsterir
With-input-from-file with-output-to-file Dosya accedilma kapatma iĢlemini otomatik yapıp
verilen proseduumlruuml uygular
Oumlrnek kodlar
Dosyadan okuma
Dosyada Scheme is fun
Write with Schemelsquo yazılıdır
(define p (open-input-file testtxt)) (read p)
(read-line p)
(read-string 300 p)
(close-input-port p) Ccedilıktısı Scheme is funr
Write with Scheme
----------------------
(with-input-from-file testtxt
(lambda ()
(read) ))
Ccedilıktısı Scheme
Dosyaya yazma
(define y merhaba)
(define p (open-output-file testtxt))
(write y p)
(display y p)
(write ifade p )
(write-char k p)
(close-output-port p)
-------------------------
(with-output-to-file test2txt
(lambda ()
(display Hello world) ))
---------------------------
KULLANICI ETKİLEŞİMİ
Bu dilde fonksiyonlar değiĢkenlere değer olarak atanan veya fonksiyonlara
delil olarak geccedilirilebilir Schemelsquode Scheme kodunu oluĢturan ve
yorumlanmasını(interpretation) isteyen bir fonksiyon tanımlamak muumlmkuumlnduumlr
Bu muumlmkuumlnduumlr ccediluumlnkuuml yorumlayıcı(interpreter) kullanıcı tarafından
eriĢilebilen(user-available) bir fonksiyondur Fonksiyonel dillerin tasarımı
Matematiksel Fonksiyonlara dayalıdır
Kullanıcıya da yakın olan sağlam bir teorik temel fakat nispeten programların
koĢacağı makinelerin mimarileriyle ilgisizdir
Schemelsquoi ayrıca diğer dillerden ayıra en oumlnemli oumlzelliklerden biri de ccedilalıĢma
esnasında uygulamaya muumldahale edebilme iznini vermesidir Bu oumlzellik
sadece oumlnceden derlenmiĢ ve ağır plug-inler aracılığı ile geniĢletilen
uygulamalara kıyasla ccedilok daha buumlyuumlk bir avantaj
FONKSİYONLAR
Bu dilde fonksiyonlar birinci-sınıf varlıklardır(entities)
ndashĠfadelerin(expressions) değerleri ve listelerin elemanları olabilirler
ndashDeğiĢkenlere(variables) atanabilirler ve parametrelere geccedililebilirler
Scheme dilindeki formlar ikiye ayrılır
Temel Formlar define lambda if quote unquote unquote-splicing
quasiquote define-syntax let-syntax letrec-syntax syntax-rules set
( 5 4) sonuccedil olarak karĢımıza ccedilikacaktir
Ifadesi de yorum satırı haline getirir kodu
Ġf deyimini oumlrnekle accedilıklayalım
(If lsaquo expr rsaquo lsaquoexpr rsaquo lsaquoexpr rsaquo)
(If (= (+ 4 5) 9) t f)
Burada ilk verdiğimiz arguumlman (= (+ 4 5) 9) iĢleminin doğru olup
olmadığına bakar Eğer iĢlem doğruysa ccedilıktı olarak t yanlıĢsa f doumlner
Anlayacağınız uumlzere bu oumlzel durum proseduumlruuml koĢul gerektiren bir proseduumlr
bu durumda ilk verdiğimiz arguumlman da koĢulu belirleyen parccedila oluyor Oumlnce
o koĢulu inceleyen yorumlayıcı da daha sonra verdiğimiz diğer arguumlmanları
koĢula goumlre seccedilerek bize gereken ccedilıktıyı veriyor
Cond deyimi( cond[ltİfadegt ltİfadegt] )
Bir soruya dayalı alternatif cevapları seccedilmek istiyorsanız cond ifadesi kullanılır
ġart ifadesidir
Cond Ģeklinde koumlĢeli parantez maddeler dizisi iccedilerir
(Cond
((ltSıcaklık 50) Soğuk)
((gt Sıcaklık 90) Ccedilok sıcak )
(else Sorun yok))
Ayrıca else Scheme dilinde cond ifadesiyle kullanılır diğer dillerde olduğu gibi if
le değil Else ifadesi ise diğer koĢullar olmadığında else koĢulu olacaktır
Do ifadesi
(do ((i 0 (+ i 1))) ((gt i 2)) (display i) (newline))
Programın ccedilıktısı
0
1
2 dir Ġlk oumlnce i ye 0 atıyor ve i yi 1 er 1 er artırarak i 2 den buumlyuumlk olana
kadar doumlnduumlruumlyor display ile de ekrana yazdırıyornewline satırı ilede bir alt
satıra geccediliyor
While ifadesi
(While (koĢul ))
(Deyim1)
(Deyim2)
)
Let ifadesi
(let ((x 5)) ( x 2))
Ekran ccedilıktısı ise 10 olurLet yanındaki ilk koĢul ifadesinde değer ataması
yapılır ve diğer ifadede de matematiksel iĢlemi gerccedilekleĢtirir
Listeler
List fonksiyonu herhangi bir sayı alır ve değerlerini iccedileren bir liste doumlnduumlruumlr
gt(listKırmızı YeĢil Mavi)
(Kırmızı yeĢilmavi)
gt(list 1 2 3 4 5)
(1 2 3 4 5)
LIST
ndash Herhangi bir sayıda parametre alır elemanları bu parametreler olan bir liste
doumlnduumlruumlr
Ayrıca Bizim listelerde bulmak iccedilin uğraĢtığımız problemler iccedilin direk
fonksiyonlar var Mesela
first listenin ilk elemanını alır
Rest listenin ilk elemanı haricindekileri alır
gt (first (list 1 2 3 ))
1
gt(rest (list 1 2 3 ))
2 3
Listeler iccedilin bir oumlrnek daha
gt( list ( list 1 2 3 ) 5 (list a b c) )
((1 2 3) 5 (a b c))
Hello World Uygulaması
Programlamaya ilk baslayan herkesin yaptığı gibi bizde scheme dilinde
ekrana ―hello world yazdiralimScheme dilinde farkli seviyelerde farklı kodlar
kullanilirPretty Big de hemen hemen buumltuumln kodlar ccedilalıĢtığı iccedilin biz genelde bu
level ı kullaniyoruz
Display ―Hello World
(write Hello World )
―Hello World
Yukarı da goumlruumllen kodlar ccedilalıĢtırıldığında aynı ekran ccedilıktısına sahip
olurlarGoumlruumllduumlğuuml gibi ne noktalı virguumll nede fazla kelimeye gerek kalmıyor
Matematik Fonksiyonları
(Exp x) e^x in sonucunu doumlnduumlruumlr
(Log x) x sayısının logaritma değerini doumlnduumlruumlr
(sqrt x) x koumlkuumlnuumln karesini doumlnduumlruumlr
(max x1 x2) verilen listeden en buumlyuumlk sayıyı doumlnduumlruumlr
(min x1 x2) verilen listeden en kuku sayıyı doumlnduumlruumlr
(quotient x1 x2) x1x2 kesrinin boumlluumlmuumlnuuml doumlnduumlruumlr
(remian x1 x2) x1x2 kesrinin kalanini doumlnduumlruumlr
(modula x1 x2) x1 in x2 ye moduumlluuml sonucunu doumlnduumlruumlr
(gcm num1 num2 ) Verilen listenin en buumlyuumlk ortak boumlleni doumlnduumlruumlr
(lcm num1 num2 ) Verilen listenin en kuku ortak ccedilarpanı doumlnduumlruumlr
(Ceiling x) x ten kuku olmayan en kuku değeri doumlnduumlruumlr
( turn cate x) Mutlak değeri x in mutlak değerinden buumlyuumlk olmayan Xlsquo en
yakın değeri doumlnduumlruumlr
(round x) xe en yakın değere yuvarlıyor
İlişkisel Operatoumlrler
(=x 1) x 1 ise true doumlnduumlruumlr
(ltx y) x yden kuumlccediluumlkse true doumlnduumlruumlr
(gtx y) x y den buumlyuumlkse true doumlnduumlruumlr
(lt=x y) x yden kuku veya eĢitse true doumlnduumlruumlr
(gt=x y) x yden buumlyuumlk veya eĢitse true doumlnduumlruumlr
(eq x y) x ve y aynı ise true doumlnduumlruumlr
(equal x y) x ve y aynı yapıda olup aynı iccedileriğe sahipse true doumlnduumlruumlr
Tip Yuumlklemeleri
(procedure x)X fonksiyon ise true doumlnduumlruumlr
(null x) X boĢ bir liste ise true doumlnduumlruumlr
(zero x )X sıfır ise true doumlnduumlruumlr
(odd x) X tek ise true doumlnduumlruumlr
(even x) X tek ise true doumlnduumlruumlr
(symbolx) X tek ise true doumlnduumlruumlr
Asal Sayı Bulma Programı
(Define (divides m n)
(Cond
[(zero m) true]
[(amplt m n) false]
[else (divides (- m n) n)]
))
(Define (check-prime prime-cand divisor)
(cond
[(= 1 divisor) true]
[(divides prime-cand divisor) false]
[else (check-prime prime-cand (sub1 divisor))]))
(define (prime x)
(cond
[(= x 0) false]
[(= x 1) false]
[else (check-prime x (- x 1))]
))
KAYNAKLAR
wwwbilgisayarkavramlaricom
httpe-bergicom2010OcakScheme
httpwwwhtdporg2003ndash09ndash26Bookcurriculum-Z-H-1html
httptranslategooglecomtrtranslatehl=tramplangpair=en7Ctrampu=http httpprogramming-musingsorg20091223scheme-lectures-mostly httptranslategooglecomtrtranslatehl=trampsl=enampu=http3A2F2Fw
httpblogyollucomtagscheme
httpwwwschemecomtspl4 httpracket-langorgdownload
PROJE KONUSU SCHEME DİLİNİN OZELİKLERİNİ TAŞIYAN VE BU PDF DE
ANLATILAN KONULAR İLGİLİ 10 SORU HAZIRLANIP BUNLARIN CEVAPLARINI
KULANICIDAN İSTENİLMESİ
PROJEDE KULANILANLAR
LİSTE
FONKSİYON
KOŞUL CUumlMLESİ
DEĞER ATAMALARI
PROJE KODU
(define k 0)
(define doğrular 0)
(define yanlışlar 0)
sorular
(define a 1soru Lamda nedir)
(define A1 1 isimsiz fonksiyonları belirler)
(define B1 2 değer ataması yapar)
(define C1 3 pointer goumlrevi yapar)
(define b 2soru hangisi aritmetik fonksiyon değildir)
(define A2 1 SQRT )
(define B2 2 MIN )
(define C2 3 QUOTE )
(define c 3soru=list kulanımı nasıldır)
(define A3 (1 LIST (A) (B) (C) (D)))
(define B3 (2 LIST A B C D) )
(define C3 (3 LIST A B C D) )
(define d 4soru=equalsimp ne demek)
(define A4 1 iki basit liste alır ve eşitliğini kontrol eder)
(define B4 2 listeleri birbirine atar)
(define C4 3 listeleri eşitler)
(define e1 5soru=append ne işe yarar)
(define A5 1 İki listeyi peş peşe ekler)
(define B5 2 iki listeyi ccedilıkarır)
(define C5 3 iki listeyi ccedilarpar)
(define f 6soru set isimlere değer atar doğrumudur)
(define A6 1 doğru)
(define B6 2 yanlis)
doğru cevap listesi
(define DListe (list 1 1 1 2 3 1) )
şıkları yazdırma
(define (Cevaplar cevapListesi)
( cond [(null cevapListesi) 0]
[else (Cevaplar (rest cevapListesi))
(display (first cevapListesi))
(display n)
]))
doğru yanlış kontroluuml
(define kon
(lambda (k FDL)
(cond ((= k FDL) (display Tebrikler )nn)(set dogrular (+ 1 dogrular)))
else ( display Maalesef olmadı (nn)(set yanlislar (+ 1 yanlislar))])))
soru ve şıkları yazdırıp cevap kontroluumlnuuml ccedilağırma
(define (Sorular soruListesi cevpListesi DListesi )
( cond [(null soruListesi) 0]
[else
(Sorular (rest soruListesi) (rest cevpListesi) (rest DListesi ))
(display (first soruListesi))
(display n)
(Cevaplar (first cevpListesi)) (set k (read)) (kon k (first DListesi)) ]))
şık listesi
(define CListe (list(list B6 A6) (list C5 B5 A5) (list C4 B4 A4) (list C3 B3 A3) (list C2 B2
A2)(list C1 B1 A1)))
Sorular fonksiyonunu ccedilağırma
(Sorular (list f e1 d c b a) CListe DListe )
yapılan doğru ve yanlış sayısını goumlsterme
(display Doğru cevap sayısı )
dogrular
(display Yanlış cevap sayısı )
yanlislar
EMEĞİ GECcedilEN BUumlTUumlN HERKESE TEŞEKUumlRLERİMİZİ SUNUYORUZhellip
EDİTOumlR TANITIMI
FILE MENUumlSUuml
mdashNEW yeni sayfa accedilar
mdashNEW TAB yeni bir sekme accedilar
mdashOPEN oumlnceden yapılmıĢ dosyayı accedilar
mdashOPEN RECENT en son accedilılmıĢ olan sayfayı accedilar
mdashINSTALL PLT FILE buna tıkladığımızda WEB ve FILE diye 2 kısım
karsımıza ccedilıkar
WEB de web den dosya yuumlklemek iccedilin (URL) giriyoruz
FILE da ise bilgisayarda bulunan herhangi bir DrScheme projesini accedilmak
iccedilin kullanıyoruz
mdashREVERT projeyi en son derlenmiĢ haline doumlnduumlruumlr Yani derlendikten
sonraki değiĢiklikleri siler
mdashSAVE DEFINITIONS projeyi kaydeder
mdash SAVE DEFINITIONS AS projeyi farklı isimde kaydetmek iccedilin kullanılır
mdashPRINT DEFINITIONS projeyi yazıcıdan ccedilıkarmak iccedilin kullanılır
mdashPRINT INTERACTION projenin ccedilıktısını yazıcıdan ccedilıkarmak iccedilin kullanılır
EDIT MENUumlSUuml
mdashUNDO (ctrl+z) geri alma goumlrevini yapar
mdashREDO (ctrl+y) ileri alma goumlrevini yapar
mdashOVERWRITE MODE C dilindeki INSERT gibi yeni harfi eski harfin uumlzerine
yazar Bir ya da birkaccedil harfi değiĢtirir(Biz uumlzerine gelip tıkladıktan sonra
yazarken değiĢtirir)
mdashWRAP TEXT kod satırları uzadığında kodlar otomatik alt satıra geccediler
mdashFIND ekranda yazılanları değiĢtirmek iccedilin kullanılır FIND a tıkladığımızda alt
kısımda ccedilıkan alana değiĢtirmek istediğimiz yeni değeri yazdığımızda editoumlr
bulduğu kelimeleri yuvarlak iccediline alınır
mdashREPLACE değiĢtirmek istenen yeri yazıyoruz(Ccedilıkan iki kutudan birine nereyi
değiĢtireceğimizi diğerine neyle değiĢtireceğimizi yazarız)
mdashHĠDE REPLACE atadığımız yeni değeri gizler
mdashKEY BINDING anahtar kelimeler
mdashPREFERENCES buradan oumlzellikleri ayarlıyoruz Oumlrneğin
FONT SĠZE yazının buumlyuumlkluumlğuumlnuuml
FONT NAME yazının ismini
COLORS da Background Color arka plan rengini ayarlar
SCHEME symbol keyword string vb yazının rengi tipi koyuluğunu
değiĢtirmek iccedilin kullanılır
FIND CASE SENSTĠVE kuumlccediluumlk buumlyuumlk harfe duyarlı olup olmadığını
goumlsterir Ġstersek ayarlayabiliriz
VIEW MENUumlSUuml
mdashHIDE DEFINITION kodların yazıldığı ekranı gizler(uumlst kısım)
mdashHIDE INTERACTION ccedilıktıların yazılı olduğu ekranı gizler(alt kısım)
mdashUSE HORIZONTAL LAYOUT editoumlruumlmuumlzdeki alttaki kısmı yanda goumlsterir
mdashSHOW PROGRAM COUNTER definition kısmındaki kodların toplu
goumlruumlnduumlğuuml ekranı getirir
mdashTOOLBAR
mdash TOOLBAR ON LEFT toolbarı solda goumlsterir mdash TOOLBAR ON RIGHT toolbarı sağda goumlsterir mdash TOOLBAR ON TOP toolbarı tepede goumlsterir mdash TOOLBAR ON HIDDEN toolbarı tamamen saklar mdashSHOW LĠNE NUMBERS sol tarafta satırlara sıra no verir
mdashSPLIT ekranın uumlst kısmını 2 ye ayırır(alt alta)
mdashCOLLAPSE ekranı eski haline getirir
LANGUAGE MENUumlSUuml
mdashCHOOSE LANGUAGE dil seccedilimi yapmayı sağlar Kullanıcı seviyesine goumlre dili seccediler Bazı
komutlar her dilde ccedilalıĢmamaktadır Oumlrnegin
BEGINNING STUDENT seccedilildiğinde Display komutu ccedilalıĢmaz
PRETTY BIG seccedilildiğinde ccedilalıĢır
RACKET MENUumlSUuml
mdashRUN programı ccedilalıĢtırır
mdashLIMIT MEMORY -unlimited
mdashlimited
Bu oumlzellikle varsayılan limit(128mb) olan bu hafızayı
değiĢtirebiliyoruz Boumlylece proje bize lazım olan hafıza kadar yer tutuyor
fazlasını tutmuyor
mdashCREATE EXECUTABLE Exe oluĢturmamızı sağlar
mdashCOMMENT OUT WĠTH A BOX kutu iccedilinde yorum satırı oluĢturmamızı
sağlar
mdashCOMMENT OUT WĠTH SEMĠCOLONS ( ) noktalı virguumll kullanarak yorum
satırı oluĢturmamızı sağlar
INSERT MENUumlSUuml
mdashINSERT COMMENT BOX kutu iccedilinde yorum satırı eklemeyi sağlar
mdashINSERT IMAGE resim eklenir
mdashINSERT FRACTION kesirli sayı oluĢturmak iccedilin kullanılır
mdashCHECK SYNTAX yazım hatalarını kontrol eder
mdashMACRO STEPPER kodu satır ccedilalıĢtırarak ilerler C taki F11 tuĢu gibi
ccedilalıĢır
Editoumlr uumlzerinde ise
Sağ alttaki ccedilarpı alt ekranı kapatmamızı sağlar
Sağ alt koumlĢedeki sayılar imlecin bulunduğu satır ve suumltunu goumlsterir
Sol altta seccediltiğimiz dil yazılıdır Uumlzerine tıkladığımızda daha oumlnceden
kullandığımız dillerin listesi goumlruumlnuumlr
DOSYA İŞLEMLERİ
Open-input-file Okunacak dosyayı accedilar
Open-output-file Yazılacak dosyayı accedilarDosya oumlnceden oluĢturulmamıĢsa oluĢturur
Close-input-port Input dosyasını kapatır
Close-output-port Output dosyasını kapatır
Read-char Dosyadan bir karakter okuduktan sonra imleci diğer karaktere taĢır Peek-char read-charlsquodan farkı imleci taĢımaz
Read-string Belirtilen sayı kadar karakter okur
Read-line Satır okur
Write Dosyaya string ifadeyi tırnak iĢaretleriyle birlikte yazar
Display Dosyaya string ifadeyi tırnak iĢaretleri olmadan yazar
Write-string Dosyaya string ifadeyi tırnak iĢaretleri olmadan yazar ayrıca karakter saysını
alt ekranda goumlsterir
With-input-from-file with-output-to-file Dosya accedilma kapatma iĢlemini otomatik yapıp
verilen proseduumlruuml uygular
Oumlrnek kodlar
Dosyadan okuma
Dosyada Scheme is fun
Write with Schemelsquo yazılıdır
(define p (open-input-file testtxt)) (read p)
(read-line p)
(read-string 300 p)
(close-input-port p) Ccedilıktısı Scheme is funr
Write with Scheme
----------------------
(with-input-from-file testtxt
(lambda ()
(read) ))
Ccedilıktısı Scheme
Dosyaya yazma
(define y merhaba)
(define p (open-output-file testtxt))
(write y p)
(display y p)
(write ifade p )
(write-char k p)
(close-output-port p)
-------------------------
(with-output-to-file test2txt
(lambda ()
(display Hello world) ))
---------------------------
KULLANICI ETKİLEŞİMİ
Bu dilde fonksiyonlar değiĢkenlere değer olarak atanan veya fonksiyonlara
delil olarak geccedilirilebilir Schemelsquode Scheme kodunu oluĢturan ve
yorumlanmasını(interpretation) isteyen bir fonksiyon tanımlamak muumlmkuumlnduumlr
Bu muumlmkuumlnduumlr ccediluumlnkuuml yorumlayıcı(interpreter) kullanıcı tarafından
eriĢilebilen(user-available) bir fonksiyondur Fonksiyonel dillerin tasarımı
Matematiksel Fonksiyonlara dayalıdır
Kullanıcıya da yakın olan sağlam bir teorik temel fakat nispeten programların
koĢacağı makinelerin mimarileriyle ilgisizdir
Schemelsquoi ayrıca diğer dillerden ayıra en oumlnemli oumlzelliklerden biri de ccedilalıĢma
esnasında uygulamaya muumldahale edebilme iznini vermesidir Bu oumlzellik
sadece oumlnceden derlenmiĢ ve ağır plug-inler aracılığı ile geniĢletilen
uygulamalara kıyasla ccedilok daha buumlyuumlk bir avantaj
FONKSİYONLAR
Bu dilde fonksiyonlar birinci-sınıf varlıklardır(entities)
ndashĠfadelerin(expressions) değerleri ve listelerin elemanları olabilirler
ndashDeğiĢkenlere(variables) atanabilirler ve parametrelere geccedililebilirler
Scheme dilindeki formlar ikiye ayrılır
Temel Formlar define lambda if quote unquote unquote-splicing
quasiquote define-syntax let-syntax letrec-syntax syntax-rules set
( 5 4) sonuccedil olarak karĢımıza ccedilikacaktir
Ifadesi de yorum satırı haline getirir kodu
Ġf deyimini oumlrnekle accedilıklayalım
(If lsaquo expr rsaquo lsaquoexpr rsaquo lsaquoexpr rsaquo)
(If (= (+ 4 5) 9) t f)
Burada ilk verdiğimiz arguumlman (= (+ 4 5) 9) iĢleminin doğru olup
olmadığına bakar Eğer iĢlem doğruysa ccedilıktı olarak t yanlıĢsa f doumlner
Anlayacağınız uumlzere bu oumlzel durum proseduumlruuml koĢul gerektiren bir proseduumlr
bu durumda ilk verdiğimiz arguumlman da koĢulu belirleyen parccedila oluyor Oumlnce
o koĢulu inceleyen yorumlayıcı da daha sonra verdiğimiz diğer arguumlmanları
koĢula goumlre seccedilerek bize gereken ccedilıktıyı veriyor
Cond deyimi( cond[ltİfadegt ltİfadegt] )
Bir soruya dayalı alternatif cevapları seccedilmek istiyorsanız cond ifadesi kullanılır
ġart ifadesidir
Cond Ģeklinde koumlĢeli parantez maddeler dizisi iccedilerir
(Cond
((ltSıcaklık 50) Soğuk)
((gt Sıcaklık 90) Ccedilok sıcak )
(else Sorun yok))
Ayrıca else Scheme dilinde cond ifadesiyle kullanılır diğer dillerde olduğu gibi if
le değil Else ifadesi ise diğer koĢullar olmadığında else koĢulu olacaktır
Do ifadesi
(do ((i 0 (+ i 1))) ((gt i 2)) (display i) (newline))
Programın ccedilıktısı
0
1
2 dir Ġlk oumlnce i ye 0 atıyor ve i yi 1 er 1 er artırarak i 2 den buumlyuumlk olana
kadar doumlnduumlruumlyor display ile de ekrana yazdırıyornewline satırı ilede bir alt
satıra geccediliyor
While ifadesi
(While (koĢul ))
(Deyim1)
(Deyim2)
)
Let ifadesi
(let ((x 5)) ( x 2))
Ekran ccedilıktısı ise 10 olurLet yanındaki ilk koĢul ifadesinde değer ataması
yapılır ve diğer ifadede de matematiksel iĢlemi gerccedilekleĢtirir
Listeler
List fonksiyonu herhangi bir sayı alır ve değerlerini iccedileren bir liste doumlnduumlruumlr
gt(listKırmızı YeĢil Mavi)
(Kırmızı yeĢilmavi)
gt(list 1 2 3 4 5)
(1 2 3 4 5)
LIST
ndash Herhangi bir sayıda parametre alır elemanları bu parametreler olan bir liste
doumlnduumlruumlr
Ayrıca Bizim listelerde bulmak iccedilin uğraĢtığımız problemler iccedilin direk
fonksiyonlar var Mesela
first listenin ilk elemanını alır
Rest listenin ilk elemanı haricindekileri alır
gt (first (list 1 2 3 ))
1
gt(rest (list 1 2 3 ))
2 3
Listeler iccedilin bir oumlrnek daha
gt( list ( list 1 2 3 ) 5 (list a b c) )
((1 2 3) 5 (a b c))
Hello World Uygulaması
Programlamaya ilk baslayan herkesin yaptığı gibi bizde scheme dilinde
ekrana ―hello world yazdiralimScheme dilinde farkli seviyelerde farklı kodlar
kullanilirPretty Big de hemen hemen buumltuumln kodlar ccedilalıĢtığı iccedilin biz genelde bu
level ı kullaniyoruz
Display ―Hello World
(write Hello World )
―Hello World
Yukarı da goumlruumllen kodlar ccedilalıĢtırıldığında aynı ekran ccedilıktısına sahip
olurlarGoumlruumllduumlğuuml gibi ne noktalı virguumll nede fazla kelimeye gerek kalmıyor
Matematik Fonksiyonları
(Exp x) e^x in sonucunu doumlnduumlruumlr
(Log x) x sayısının logaritma değerini doumlnduumlruumlr
(sqrt x) x koumlkuumlnuumln karesini doumlnduumlruumlr
(max x1 x2) verilen listeden en buumlyuumlk sayıyı doumlnduumlruumlr
(min x1 x2) verilen listeden en kuku sayıyı doumlnduumlruumlr
(quotient x1 x2) x1x2 kesrinin boumlluumlmuumlnuuml doumlnduumlruumlr
(remian x1 x2) x1x2 kesrinin kalanini doumlnduumlruumlr
(modula x1 x2) x1 in x2 ye moduumlluuml sonucunu doumlnduumlruumlr
(gcm num1 num2 ) Verilen listenin en buumlyuumlk ortak boumlleni doumlnduumlruumlr
(lcm num1 num2 ) Verilen listenin en kuku ortak ccedilarpanı doumlnduumlruumlr
(Ceiling x) x ten kuku olmayan en kuku değeri doumlnduumlruumlr
( turn cate x) Mutlak değeri x in mutlak değerinden buumlyuumlk olmayan Xlsquo en
yakın değeri doumlnduumlruumlr
(round x) xe en yakın değere yuvarlıyor
İlişkisel Operatoumlrler
(=x 1) x 1 ise true doumlnduumlruumlr
(ltx y) x yden kuumlccediluumlkse true doumlnduumlruumlr
(gtx y) x y den buumlyuumlkse true doumlnduumlruumlr
(lt=x y) x yden kuku veya eĢitse true doumlnduumlruumlr
(gt=x y) x yden buumlyuumlk veya eĢitse true doumlnduumlruumlr
(eq x y) x ve y aynı ise true doumlnduumlruumlr
(equal x y) x ve y aynı yapıda olup aynı iccedileriğe sahipse true doumlnduumlruumlr
Tip Yuumlklemeleri
(procedure x)X fonksiyon ise true doumlnduumlruumlr
(null x) X boĢ bir liste ise true doumlnduumlruumlr
(zero x )X sıfır ise true doumlnduumlruumlr
(odd x) X tek ise true doumlnduumlruumlr
(even x) X tek ise true doumlnduumlruumlr
(symbolx) X tek ise true doumlnduumlruumlr
Asal Sayı Bulma Programı
(Define (divides m n)
(Cond
[(zero m) true]
[(amplt m n) false]
[else (divides (- m n) n)]
))
(Define (check-prime prime-cand divisor)
(cond
[(= 1 divisor) true]
[(divides prime-cand divisor) false]
[else (check-prime prime-cand (sub1 divisor))]))
(define (prime x)
(cond
[(= x 0) false]
[(= x 1) false]
[else (check-prime x (- x 1))]
))
KAYNAKLAR
wwwbilgisayarkavramlaricom
httpe-bergicom2010OcakScheme
httpwwwhtdporg2003ndash09ndash26Bookcurriculum-Z-H-1html
httptranslategooglecomtrtranslatehl=tramplangpair=en7Ctrampu=http httpprogramming-musingsorg20091223scheme-lectures-mostly httptranslategooglecomtrtranslatehl=trampsl=enampu=http3A2F2Fw
httpblogyollucomtagscheme
httpwwwschemecomtspl4 httpracket-langorgdownload
PROJE KONUSU SCHEME DİLİNİN OZELİKLERİNİ TAŞIYAN VE BU PDF DE
ANLATILAN KONULAR İLGİLİ 10 SORU HAZIRLANIP BUNLARIN CEVAPLARINI
KULANICIDAN İSTENİLMESİ
PROJEDE KULANILANLAR
LİSTE
FONKSİYON
KOŞUL CUumlMLESİ
DEĞER ATAMALARI
PROJE KODU
(define k 0)
(define doğrular 0)
(define yanlışlar 0)
sorular
(define a 1soru Lamda nedir)
(define A1 1 isimsiz fonksiyonları belirler)
(define B1 2 değer ataması yapar)
(define C1 3 pointer goumlrevi yapar)
(define b 2soru hangisi aritmetik fonksiyon değildir)
(define A2 1 SQRT )
(define B2 2 MIN )
(define C2 3 QUOTE )
(define c 3soru=list kulanımı nasıldır)
(define A3 (1 LIST (A) (B) (C) (D)))
(define B3 (2 LIST A B C D) )
(define C3 (3 LIST A B C D) )
(define d 4soru=equalsimp ne demek)
(define A4 1 iki basit liste alır ve eşitliğini kontrol eder)
(define B4 2 listeleri birbirine atar)
(define C4 3 listeleri eşitler)
(define e1 5soru=append ne işe yarar)
(define A5 1 İki listeyi peş peşe ekler)
(define B5 2 iki listeyi ccedilıkarır)
(define C5 3 iki listeyi ccedilarpar)
(define f 6soru set isimlere değer atar doğrumudur)
(define A6 1 doğru)
(define B6 2 yanlis)
doğru cevap listesi
(define DListe (list 1 1 1 2 3 1) )
şıkları yazdırma
(define (Cevaplar cevapListesi)
( cond [(null cevapListesi) 0]
[else (Cevaplar (rest cevapListesi))
(display (first cevapListesi))
(display n)
]))
doğru yanlış kontroluuml
(define kon
(lambda (k FDL)
(cond ((= k FDL) (display Tebrikler )nn)(set dogrular (+ 1 dogrular)))
else ( display Maalesef olmadı (nn)(set yanlislar (+ 1 yanlislar))])))
soru ve şıkları yazdırıp cevap kontroluumlnuuml ccedilağırma
(define (Sorular soruListesi cevpListesi DListesi )
( cond [(null soruListesi) 0]
[else
(Sorular (rest soruListesi) (rest cevpListesi) (rest DListesi ))
(display (first soruListesi))
(display n)
(Cevaplar (first cevpListesi)) (set k (read)) (kon k (first DListesi)) ]))
şık listesi
(define CListe (list(list B6 A6) (list C5 B5 A5) (list C4 B4 A4) (list C3 B3 A3) (list C2 B2
A2)(list C1 B1 A1)))
Sorular fonksiyonunu ccedilağırma
(Sorular (list f e1 d c b a) CListe DListe )
yapılan doğru ve yanlış sayısını goumlsterme
(display Doğru cevap sayısı )
dogrular
(display Yanlış cevap sayısı )
yanlislar
EMEĞİ GECcedilEN BUumlTUumlN HERKESE TEŞEKUumlRLERİMİZİ SUNUYORUZhellip
EDIT MENUumlSUuml
mdashUNDO (ctrl+z) geri alma goumlrevini yapar
mdashREDO (ctrl+y) ileri alma goumlrevini yapar
mdashOVERWRITE MODE C dilindeki INSERT gibi yeni harfi eski harfin uumlzerine
yazar Bir ya da birkaccedil harfi değiĢtirir(Biz uumlzerine gelip tıkladıktan sonra
yazarken değiĢtirir)
mdashWRAP TEXT kod satırları uzadığında kodlar otomatik alt satıra geccediler
mdashFIND ekranda yazılanları değiĢtirmek iccedilin kullanılır FIND a tıkladığımızda alt
kısımda ccedilıkan alana değiĢtirmek istediğimiz yeni değeri yazdığımızda editoumlr
bulduğu kelimeleri yuvarlak iccediline alınır
mdashREPLACE değiĢtirmek istenen yeri yazıyoruz(Ccedilıkan iki kutudan birine nereyi
değiĢtireceğimizi diğerine neyle değiĢtireceğimizi yazarız)
mdashHĠDE REPLACE atadığımız yeni değeri gizler
mdashKEY BINDING anahtar kelimeler
mdashPREFERENCES buradan oumlzellikleri ayarlıyoruz Oumlrneğin
FONT SĠZE yazının buumlyuumlkluumlğuumlnuuml
FONT NAME yazının ismini
COLORS da Background Color arka plan rengini ayarlar
SCHEME symbol keyword string vb yazının rengi tipi koyuluğunu
değiĢtirmek iccedilin kullanılır
FIND CASE SENSTĠVE kuumlccediluumlk buumlyuumlk harfe duyarlı olup olmadığını
goumlsterir Ġstersek ayarlayabiliriz
VIEW MENUumlSUuml
mdashHIDE DEFINITION kodların yazıldığı ekranı gizler(uumlst kısım)
mdashHIDE INTERACTION ccedilıktıların yazılı olduğu ekranı gizler(alt kısım)
mdashUSE HORIZONTAL LAYOUT editoumlruumlmuumlzdeki alttaki kısmı yanda goumlsterir
mdashSHOW PROGRAM COUNTER definition kısmındaki kodların toplu
goumlruumlnduumlğuuml ekranı getirir
mdashTOOLBAR
mdash TOOLBAR ON LEFT toolbarı solda goumlsterir mdash TOOLBAR ON RIGHT toolbarı sağda goumlsterir mdash TOOLBAR ON TOP toolbarı tepede goumlsterir mdash TOOLBAR ON HIDDEN toolbarı tamamen saklar mdashSHOW LĠNE NUMBERS sol tarafta satırlara sıra no verir
mdashSPLIT ekranın uumlst kısmını 2 ye ayırır(alt alta)
mdashCOLLAPSE ekranı eski haline getirir
LANGUAGE MENUumlSUuml
mdashCHOOSE LANGUAGE dil seccedilimi yapmayı sağlar Kullanıcı seviyesine goumlre dili seccediler Bazı
komutlar her dilde ccedilalıĢmamaktadır Oumlrnegin
BEGINNING STUDENT seccedilildiğinde Display komutu ccedilalıĢmaz
PRETTY BIG seccedilildiğinde ccedilalıĢır
RACKET MENUumlSUuml
mdashRUN programı ccedilalıĢtırır
mdashLIMIT MEMORY -unlimited
mdashlimited
Bu oumlzellikle varsayılan limit(128mb) olan bu hafızayı
değiĢtirebiliyoruz Boumlylece proje bize lazım olan hafıza kadar yer tutuyor
fazlasını tutmuyor
mdashCREATE EXECUTABLE Exe oluĢturmamızı sağlar
mdashCOMMENT OUT WĠTH A BOX kutu iccedilinde yorum satırı oluĢturmamızı
sağlar
mdashCOMMENT OUT WĠTH SEMĠCOLONS ( ) noktalı virguumll kullanarak yorum
satırı oluĢturmamızı sağlar
INSERT MENUumlSUuml
mdashINSERT COMMENT BOX kutu iccedilinde yorum satırı eklemeyi sağlar
mdashINSERT IMAGE resim eklenir
mdashINSERT FRACTION kesirli sayı oluĢturmak iccedilin kullanılır
mdashCHECK SYNTAX yazım hatalarını kontrol eder
mdashMACRO STEPPER kodu satır ccedilalıĢtırarak ilerler C taki F11 tuĢu gibi
ccedilalıĢır
Editoumlr uumlzerinde ise
Sağ alttaki ccedilarpı alt ekranı kapatmamızı sağlar
Sağ alt koumlĢedeki sayılar imlecin bulunduğu satır ve suumltunu goumlsterir
Sol altta seccediltiğimiz dil yazılıdır Uumlzerine tıkladığımızda daha oumlnceden
kullandığımız dillerin listesi goumlruumlnuumlr
DOSYA İŞLEMLERİ
Open-input-file Okunacak dosyayı accedilar
Open-output-file Yazılacak dosyayı accedilarDosya oumlnceden oluĢturulmamıĢsa oluĢturur
Close-input-port Input dosyasını kapatır
Close-output-port Output dosyasını kapatır
Read-char Dosyadan bir karakter okuduktan sonra imleci diğer karaktere taĢır Peek-char read-charlsquodan farkı imleci taĢımaz
Read-string Belirtilen sayı kadar karakter okur
Read-line Satır okur
Write Dosyaya string ifadeyi tırnak iĢaretleriyle birlikte yazar
Display Dosyaya string ifadeyi tırnak iĢaretleri olmadan yazar
Write-string Dosyaya string ifadeyi tırnak iĢaretleri olmadan yazar ayrıca karakter saysını
alt ekranda goumlsterir
With-input-from-file with-output-to-file Dosya accedilma kapatma iĢlemini otomatik yapıp
verilen proseduumlruuml uygular
Oumlrnek kodlar
Dosyadan okuma
Dosyada Scheme is fun
Write with Schemelsquo yazılıdır
(define p (open-input-file testtxt)) (read p)
(read-line p)
(read-string 300 p)
(close-input-port p) Ccedilıktısı Scheme is funr
Write with Scheme
----------------------
(with-input-from-file testtxt
(lambda ()
(read) ))
Ccedilıktısı Scheme
Dosyaya yazma
(define y merhaba)
(define p (open-output-file testtxt))
(write y p)
(display y p)
(write ifade p )
(write-char k p)
(close-output-port p)
-------------------------
(with-output-to-file test2txt
(lambda ()
(display Hello world) ))
---------------------------
KULLANICI ETKİLEŞİMİ
Bu dilde fonksiyonlar değiĢkenlere değer olarak atanan veya fonksiyonlara
delil olarak geccedilirilebilir Schemelsquode Scheme kodunu oluĢturan ve
yorumlanmasını(interpretation) isteyen bir fonksiyon tanımlamak muumlmkuumlnduumlr
Bu muumlmkuumlnduumlr ccediluumlnkuuml yorumlayıcı(interpreter) kullanıcı tarafından
eriĢilebilen(user-available) bir fonksiyondur Fonksiyonel dillerin tasarımı
Matematiksel Fonksiyonlara dayalıdır
Kullanıcıya da yakın olan sağlam bir teorik temel fakat nispeten programların
koĢacağı makinelerin mimarileriyle ilgisizdir
Schemelsquoi ayrıca diğer dillerden ayıra en oumlnemli oumlzelliklerden biri de ccedilalıĢma
esnasında uygulamaya muumldahale edebilme iznini vermesidir Bu oumlzellik
sadece oumlnceden derlenmiĢ ve ağır plug-inler aracılığı ile geniĢletilen
uygulamalara kıyasla ccedilok daha buumlyuumlk bir avantaj
FONKSİYONLAR
Bu dilde fonksiyonlar birinci-sınıf varlıklardır(entities)
ndashĠfadelerin(expressions) değerleri ve listelerin elemanları olabilirler
ndashDeğiĢkenlere(variables) atanabilirler ve parametrelere geccedililebilirler
Scheme dilindeki formlar ikiye ayrılır
Temel Formlar define lambda if quote unquote unquote-splicing
quasiquote define-syntax let-syntax letrec-syntax syntax-rules set
( 5 4) sonuccedil olarak karĢımıza ccedilikacaktir
Ifadesi de yorum satırı haline getirir kodu
Ġf deyimini oumlrnekle accedilıklayalım
(If lsaquo expr rsaquo lsaquoexpr rsaquo lsaquoexpr rsaquo)
(If (= (+ 4 5) 9) t f)
Burada ilk verdiğimiz arguumlman (= (+ 4 5) 9) iĢleminin doğru olup
olmadığına bakar Eğer iĢlem doğruysa ccedilıktı olarak t yanlıĢsa f doumlner
Anlayacağınız uumlzere bu oumlzel durum proseduumlruuml koĢul gerektiren bir proseduumlr
bu durumda ilk verdiğimiz arguumlman da koĢulu belirleyen parccedila oluyor Oumlnce
o koĢulu inceleyen yorumlayıcı da daha sonra verdiğimiz diğer arguumlmanları
koĢula goumlre seccedilerek bize gereken ccedilıktıyı veriyor
Cond deyimi( cond[ltİfadegt ltİfadegt] )
Bir soruya dayalı alternatif cevapları seccedilmek istiyorsanız cond ifadesi kullanılır
ġart ifadesidir
Cond Ģeklinde koumlĢeli parantez maddeler dizisi iccedilerir
(Cond
((ltSıcaklık 50) Soğuk)
((gt Sıcaklık 90) Ccedilok sıcak )
(else Sorun yok))
Ayrıca else Scheme dilinde cond ifadesiyle kullanılır diğer dillerde olduğu gibi if
le değil Else ifadesi ise diğer koĢullar olmadığında else koĢulu olacaktır
Do ifadesi
(do ((i 0 (+ i 1))) ((gt i 2)) (display i) (newline))
Programın ccedilıktısı
0
1
2 dir Ġlk oumlnce i ye 0 atıyor ve i yi 1 er 1 er artırarak i 2 den buumlyuumlk olana
kadar doumlnduumlruumlyor display ile de ekrana yazdırıyornewline satırı ilede bir alt
satıra geccediliyor
While ifadesi
(While (koĢul ))
(Deyim1)
(Deyim2)
)
Let ifadesi
(let ((x 5)) ( x 2))
Ekran ccedilıktısı ise 10 olurLet yanındaki ilk koĢul ifadesinde değer ataması
yapılır ve diğer ifadede de matematiksel iĢlemi gerccedilekleĢtirir
Listeler
List fonksiyonu herhangi bir sayı alır ve değerlerini iccedileren bir liste doumlnduumlruumlr
gt(listKırmızı YeĢil Mavi)
(Kırmızı yeĢilmavi)
gt(list 1 2 3 4 5)
(1 2 3 4 5)
LIST
ndash Herhangi bir sayıda parametre alır elemanları bu parametreler olan bir liste
doumlnduumlruumlr
Ayrıca Bizim listelerde bulmak iccedilin uğraĢtığımız problemler iccedilin direk
fonksiyonlar var Mesela
first listenin ilk elemanını alır
Rest listenin ilk elemanı haricindekileri alır
gt (first (list 1 2 3 ))
1
gt(rest (list 1 2 3 ))
2 3
Listeler iccedilin bir oumlrnek daha
gt( list ( list 1 2 3 ) 5 (list a b c) )
((1 2 3) 5 (a b c))
Hello World Uygulaması
Programlamaya ilk baslayan herkesin yaptığı gibi bizde scheme dilinde
ekrana ―hello world yazdiralimScheme dilinde farkli seviyelerde farklı kodlar
kullanilirPretty Big de hemen hemen buumltuumln kodlar ccedilalıĢtığı iccedilin biz genelde bu
level ı kullaniyoruz
Display ―Hello World
(write Hello World )
―Hello World
Yukarı da goumlruumllen kodlar ccedilalıĢtırıldığında aynı ekran ccedilıktısına sahip
olurlarGoumlruumllduumlğuuml gibi ne noktalı virguumll nede fazla kelimeye gerek kalmıyor
Matematik Fonksiyonları
(Exp x) e^x in sonucunu doumlnduumlruumlr
(Log x) x sayısının logaritma değerini doumlnduumlruumlr
(sqrt x) x koumlkuumlnuumln karesini doumlnduumlruumlr
(max x1 x2) verilen listeden en buumlyuumlk sayıyı doumlnduumlruumlr
(min x1 x2) verilen listeden en kuku sayıyı doumlnduumlruumlr
(quotient x1 x2) x1x2 kesrinin boumlluumlmuumlnuuml doumlnduumlruumlr
(remian x1 x2) x1x2 kesrinin kalanini doumlnduumlruumlr
(modula x1 x2) x1 in x2 ye moduumlluuml sonucunu doumlnduumlruumlr
(gcm num1 num2 ) Verilen listenin en buumlyuumlk ortak boumlleni doumlnduumlruumlr
(lcm num1 num2 ) Verilen listenin en kuku ortak ccedilarpanı doumlnduumlruumlr
(Ceiling x) x ten kuku olmayan en kuku değeri doumlnduumlruumlr
( turn cate x) Mutlak değeri x in mutlak değerinden buumlyuumlk olmayan Xlsquo en
yakın değeri doumlnduumlruumlr
(round x) xe en yakın değere yuvarlıyor
İlişkisel Operatoumlrler
(=x 1) x 1 ise true doumlnduumlruumlr
(ltx y) x yden kuumlccediluumlkse true doumlnduumlruumlr
(gtx y) x y den buumlyuumlkse true doumlnduumlruumlr
(lt=x y) x yden kuku veya eĢitse true doumlnduumlruumlr
(gt=x y) x yden buumlyuumlk veya eĢitse true doumlnduumlruumlr
(eq x y) x ve y aynı ise true doumlnduumlruumlr
(equal x y) x ve y aynı yapıda olup aynı iccedileriğe sahipse true doumlnduumlruumlr
Tip Yuumlklemeleri
(procedure x)X fonksiyon ise true doumlnduumlruumlr
(null x) X boĢ bir liste ise true doumlnduumlruumlr
(zero x )X sıfır ise true doumlnduumlruumlr
(odd x) X tek ise true doumlnduumlruumlr
(even x) X tek ise true doumlnduumlruumlr
(symbolx) X tek ise true doumlnduumlruumlr
Asal Sayı Bulma Programı
(Define (divides m n)
(Cond
[(zero m) true]
[(amplt m n) false]
[else (divides (- m n) n)]
))
(Define (check-prime prime-cand divisor)
(cond
[(= 1 divisor) true]
[(divides prime-cand divisor) false]
[else (check-prime prime-cand (sub1 divisor))]))
(define (prime x)
(cond
[(= x 0) false]
[(= x 1) false]
[else (check-prime x (- x 1))]
))
KAYNAKLAR
wwwbilgisayarkavramlaricom
httpe-bergicom2010OcakScheme
httpwwwhtdporg2003ndash09ndash26Bookcurriculum-Z-H-1html
httptranslategooglecomtrtranslatehl=tramplangpair=en7Ctrampu=http httpprogramming-musingsorg20091223scheme-lectures-mostly httptranslategooglecomtrtranslatehl=trampsl=enampu=http3A2F2Fw
httpblogyollucomtagscheme
httpwwwschemecomtspl4 httpracket-langorgdownload
PROJE KONUSU SCHEME DİLİNİN OZELİKLERİNİ TAŞIYAN VE BU PDF DE
ANLATILAN KONULAR İLGİLİ 10 SORU HAZIRLANIP BUNLARIN CEVAPLARINI
KULANICIDAN İSTENİLMESİ
PROJEDE KULANILANLAR
LİSTE
FONKSİYON
KOŞUL CUumlMLESİ
DEĞER ATAMALARI
PROJE KODU
(define k 0)
(define doğrular 0)
(define yanlışlar 0)
sorular
(define a 1soru Lamda nedir)
(define A1 1 isimsiz fonksiyonları belirler)
(define B1 2 değer ataması yapar)
(define C1 3 pointer goumlrevi yapar)
(define b 2soru hangisi aritmetik fonksiyon değildir)
(define A2 1 SQRT )
(define B2 2 MIN )
(define C2 3 QUOTE )
(define c 3soru=list kulanımı nasıldır)
(define A3 (1 LIST (A) (B) (C) (D)))
(define B3 (2 LIST A B C D) )
(define C3 (3 LIST A B C D) )
(define d 4soru=equalsimp ne demek)
(define A4 1 iki basit liste alır ve eşitliğini kontrol eder)
(define B4 2 listeleri birbirine atar)
(define C4 3 listeleri eşitler)
(define e1 5soru=append ne işe yarar)
(define A5 1 İki listeyi peş peşe ekler)
(define B5 2 iki listeyi ccedilıkarır)
(define C5 3 iki listeyi ccedilarpar)
(define f 6soru set isimlere değer atar doğrumudur)
(define A6 1 doğru)
(define B6 2 yanlis)
doğru cevap listesi
(define DListe (list 1 1 1 2 3 1) )
şıkları yazdırma
(define (Cevaplar cevapListesi)
( cond [(null cevapListesi) 0]
[else (Cevaplar (rest cevapListesi))
(display (first cevapListesi))
(display n)
]))
doğru yanlış kontroluuml
(define kon
(lambda (k FDL)
(cond ((= k FDL) (display Tebrikler )nn)(set dogrular (+ 1 dogrular)))
else ( display Maalesef olmadı (nn)(set yanlislar (+ 1 yanlislar))])))
soru ve şıkları yazdırıp cevap kontroluumlnuuml ccedilağırma
(define (Sorular soruListesi cevpListesi DListesi )
( cond [(null soruListesi) 0]
[else
(Sorular (rest soruListesi) (rest cevpListesi) (rest DListesi ))
(display (first soruListesi))
(display n)
(Cevaplar (first cevpListesi)) (set k (read)) (kon k (first DListesi)) ]))
şık listesi
(define CListe (list(list B6 A6) (list C5 B5 A5) (list C4 B4 A4) (list C3 B3 A3) (list C2 B2
A2)(list C1 B1 A1)))
Sorular fonksiyonunu ccedilağırma
(Sorular (list f e1 d c b a) CListe DListe )
yapılan doğru ve yanlış sayısını goumlsterme
(display Doğru cevap sayısı )
dogrular
(display Yanlış cevap sayısı )
yanlislar
EMEĞİ GECcedilEN BUumlTUumlN HERKESE TEŞEKUumlRLERİMİZİ SUNUYORUZhellip
COLORS da Background Color arka plan rengini ayarlar
SCHEME symbol keyword string vb yazının rengi tipi koyuluğunu
değiĢtirmek iccedilin kullanılır
FIND CASE SENSTĠVE kuumlccediluumlk buumlyuumlk harfe duyarlı olup olmadığını
goumlsterir Ġstersek ayarlayabiliriz
VIEW MENUumlSUuml
mdashHIDE DEFINITION kodların yazıldığı ekranı gizler(uumlst kısım)
mdashHIDE INTERACTION ccedilıktıların yazılı olduğu ekranı gizler(alt kısım)
mdashUSE HORIZONTAL LAYOUT editoumlruumlmuumlzdeki alttaki kısmı yanda goumlsterir
mdashSHOW PROGRAM COUNTER definition kısmındaki kodların toplu
goumlruumlnduumlğuuml ekranı getirir
mdashTOOLBAR
mdash TOOLBAR ON LEFT toolbarı solda goumlsterir mdash TOOLBAR ON RIGHT toolbarı sağda goumlsterir mdash TOOLBAR ON TOP toolbarı tepede goumlsterir mdash TOOLBAR ON HIDDEN toolbarı tamamen saklar mdashSHOW LĠNE NUMBERS sol tarafta satırlara sıra no verir
mdashSPLIT ekranın uumlst kısmını 2 ye ayırır(alt alta)
mdashCOLLAPSE ekranı eski haline getirir
LANGUAGE MENUumlSUuml
mdashCHOOSE LANGUAGE dil seccedilimi yapmayı sağlar Kullanıcı seviyesine goumlre dili seccediler Bazı
komutlar her dilde ccedilalıĢmamaktadır Oumlrnegin
BEGINNING STUDENT seccedilildiğinde Display komutu ccedilalıĢmaz
PRETTY BIG seccedilildiğinde ccedilalıĢır
RACKET MENUumlSUuml
mdashRUN programı ccedilalıĢtırır
mdashLIMIT MEMORY -unlimited
mdashlimited
Bu oumlzellikle varsayılan limit(128mb) olan bu hafızayı
değiĢtirebiliyoruz Boumlylece proje bize lazım olan hafıza kadar yer tutuyor
fazlasını tutmuyor
mdashCREATE EXECUTABLE Exe oluĢturmamızı sağlar
mdashCOMMENT OUT WĠTH A BOX kutu iccedilinde yorum satırı oluĢturmamızı
sağlar
mdashCOMMENT OUT WĠTH SEMĠCOLONS ( ) noktalı virguumll kullanarak yorum
satırı oluĢturmamızı sağlar
INSERT MENUumlSUuml
mdashINSERT COMMENT BOX kutu iccedilinde yorum satırı eklemeyi sağlar
mdashINSERT IMAGE resim eklenir
mdashINSERT FRACTION kesirli sayı oluĢturmak iccedilin kullanılır
mdashCHECK SYNTAX yazım hatalarını kontrol eder
mdashMACRO STEPPER kodu satır ccedilalıĢtırarak ilerler C taki F11 tuĢu gibi
ccedilalıĢır
Editoumlr uumlzerinde ise
Sağ alttaki ccedilarpı alt ekranı kapatmamızı sağlar
Sağ alt koumlĢedeki sayılar imlecin bulunduğu satır ve suumltunu goumlsterir
Sol altta seccediltiğimiz dil yazılıdır Uumlzerine tıkladığımızda daha oumlnceden
kullandığımız dillerin listesi goumlruumlnuumlr
DOSYA İŞLEMLERİ
Open-input-file Okunacak dosyayı accedilar
Open-output-file Yazılacak dosyayı accedilarDosya oumlnceden oluĢturulmamıĢsa oluĢturur
Close-input-port Input dosyasını kapatır
Close-output-port Output dosyasını kapatır
Read-char Dosyadan bir karakter okuduktan sonra imleci diğer karaktere taĢır Peek-char read-charlsquodan farkı imleci taĢımaz
Read-string Belirtilen sayı kadar karakter okur
Read-line Satır okur
Write Dosyaya string ifadeyi tırnak iĢaretleriyle birlikte yazar
Display Dosyaya string ifadeyi tırnak iĢaretleri olmadan yazar
Write-string Dosyaya string ifadeyi tırnak iĢaretleri olmadan yazar ayrıca karakter saysını
alt ekranda goumlsterir
With-input-from-file with-output-to-file Dosya accedilma kapatma iĢlemini otomatik yapıp
verilen proseduumlruuml uygular
Oumlrnek kodlar
Dosyadan okuma
Dosyada Scheme is fun
Write with Schemelsquo yazılıdır
(define p (open-input-file testtxt)) (read p)
(read-line p)
(read-string 300 p)
(close-input-port p) Ccedilıktısı Scheme is funr
Write with Scheme
----------------------
(with-input-from-file testtxt
(lambda ()
(read) ))
Ccedilıktısı Scheme
Dosyaya yazma
(define y merhaba)
(define p (open-output-file testtxt))
(write y p)
(display y p)
(write ifade p )
(write-char k p)
(close-output-port p)
-------------------------
(with-output-to-file test2txt
(lambda ()
(display Hello world) ))
---------------------------
KULLANICI ETKİLEŞİMİ
Bu dilde fonksiyonlar değiĢkenlere değer olarak atanan veya fonksiyonlara
delil olarak geccedilirilebilir Schemelsquode Scheme kodunu oluĢturan ve
yorumlanmasını(interpretation) isteyen bir fonksiyon tanımlamak muumlmkuumlnduumlr
Bu muumlmkuumlnduumlr ccediluumlnkuuml yorumlayıcı(interpreter) kullanıcı tarafından
eriĢilebilen(user-available) bir fonksiyondur Fonksiyonel dillerin tasarımı
Matematiksel Fonksiyonlara dayalıdır
Kullanıcıya da yakın olan sağlam bir teorik temel fakat nispeten programların
koĢacağı makinelerin mimarileriyle ilgisizdir
Schemelsquoi ayrıca diğer dillerden ayıra en oumlnemli oumlzelliklerden biri de ccedilalıĢma
esnasında uygulamaya muumldahale edebilme iznini vermesidir Bu oumlzellik
sadece oumlnceden derlenmiĢ ve ağır plug-inler aracılığı ile geniĢletilen
uygulamalara kıyasla ccedilok daha buumlyuumlk bir avantaj
FONKSİYONLAR
Bu dilde fonksiyonlar birinci-sınıf varlıklardır(entities)
ndashĠfadelerin(expressions) değerleri ve listelerin elemanları olabilirler
ndashDeğiĢkenlere(variables) atanabilirler ve parametrelere geccedililebilirler
Scheme dilindeki formlar ikiye ayrılır
Temel Formlar define lambda if quote unquote unquote-splicing
quasiquote define-syntax let-syntax letrec-syntax syntax-rules set
( 5 4) sonuccedil olarak karĢımıza ccedilikacaktir
Ifadesi de yorum satırı haline getirir kodu
Ġf deyimini oumlrnekle accedilıklayalım
(If lsaquo expr rsaquo lsaquoexpr rsaquo lsaquoexpr rsaquo)
(If (= (+ 4 5) 9) t f)
Burada ilk verdiğimiz arguumlman (= (+ 4 5) 9) iĢleminin doğru olup
olmadığına bakar Eğer iĢlem doğruysa ccedilıktı olarak t yanlıĢsa f doumlner
Anlayacağınız uumlzere bu oumlzel durum proseduumlruuml koĢul gerektiren bir proseduumlr
bu durumda ilk verdiğimiz arguumlman da koĢulu belirleyen parccedila oluyor Oumlnce
o koĢulu inceleyen yorumlayıcı da daha sonra verdiğimiz diğer arguumlmanları
koĢula goumlre seccedilerek bize gereken ccedilıktıyı veriyor
Cond deyimi( cond[ltİfadegt ltİfadegt] )
Bir soruya dayalı alternatif cevapları seccedilmek istiyorsanız cond ifadesi kullanılır
ġart ifadesidir
Cond Ģeklinde koumlĢeli parantez maddeler dizisi iccedilerir
(Cond
((ltSıcaklık 50) Soğuk)
((gt Sıcaklık 90) Ccedilok sıcak )
(else Sorun yok))
Ayrıca else Scheme dilinde cond ifadesiyle kullanılır diğer dillerde olduğu gibi if
le değil Else ifadesi ise diğer koĢullar olmadığında else koĢulu olacaktır
Do ifadesi
(do ((i 0 (+ i 1))) ((gt i 2)) (display i) (newline))
Programın ccedilıktısı
0
1
2 dir Ġlk oumlnce i ye 0 atıyor ve i yi 1 er 1 er artırarak i 2 den buumlyuumlk olana
kadar doumlnduumlruumlyor display ile de ekrana yazdırıyornewline satırı ilede bir alt
satıra geccediliyor
While ifadesi
(While (koĢul ))
(Deyim1)
(Deyim2)
)
Let ifadesi
(let ((x 5)) ( x 2))
Ekran ccedilıktısı ise 10 olurLet yanındaki ilk koĢul ifadesinde değer ataması
yapılır ve diğer ifadede de matematiksel iĢlemi gerccedilekleĢtirir
Listeler
List fonksiyonu herhangi bir sayı alır ve değerlerini iccedileren bir liste doumlnduumlruumlr
gt(listKırmızı YeĢil Mavi)
(Kırmızı yeĢilmavi)
gt(list 1 2 3 4 5)
(1 2 3 4 5)
LIST
ndash Herhangi bir sayıda parametre alır elemanları bu parametreler olan bir liste
doumlnduumlruumlr
Ayrıca Bizim listelerde bulmak iccedilin uğraĢtığımız problemler iccedilin direk
fonksiyonlar var Mesela
first listenin ilk elemanını alır
Rest listenin ilk elemanı haricindekileri alır
gt (first (list 1 2 3 ))
1
gt(rest (list 1 2 3 ))
2 3
Listeler iccedilin bir oumlrnek daha
gt( list ( list 1 2 3 ) 5 (list a b c) )
((1 2 3) 5 (a b c))
Hello World Uygulaması
Programlamaya ilk baslayan herkesin yaptığı gibi bizde scheme dilinde
ekrana ―hello world yazdiralimScheme dilinde farkli seviyelerde farklı kodlar
kullanilirPretty Big de hemen hemen buumltuumln kodlar ccedilalıĢtığı iccedilin biz genelde bu
level ı kullaniyoruz
Display ―Hello World
(write Hello World )
―Hello World
Yukarı da goumlruumllen kodlar ccedilalıĢtırıldığında aynı ekran ccedilıktısına sahip
olurlarGoumlruumllduumlğuuml gibi ne noktalı virguumll nede fazla kelimeye gerek kalmıyor
Matematik Fonksiyonları
(Exp x) e^x in sonucunu doumlnduumlruumlr
(Log x) x sayısının logaritma değerini doumlnduumlruumlr
(sqrt x) x koumlkuumlnuumln karesini doumlnduumlruumlr
(max x1 x2) verilen listeden en buumlyuumlk sayıyı doumlnduumlruumlr
(min x1 x2) verilen listeden en kuku sayıyı doumlnduumlruumlr
(quotient x1 x2) x1x2 kesrinin boumlluumlmuumlnuuml doumlnduumlruumlr
(remian x1 x2) x1x2 kesrinin kalanini doumlnduumlruumlr
(modula x1 x2) x1 in x2 ye moduumlluuml sonucunu doumlnduumlruumlr
(gcm num1 num2 ) Verilen listenin en buumlyuumlk ortak boumlleni doumlnduumlruumlr
(lcm num1 num2 ) Verilen listenin en kuku ortak ccedilarpanı doumlnduumlruumlr
(Ceiling x) x ten kuku olmayan en kuku değeri doumlnduumlruumlr
( turn cate x) Mutlak değeri x in mutlak değerinden buumlyuumlk olmayan Xlsquo en
yakın değeri doumlnduumlruumlr
(round x) xe en yakın değere yuvarlıyor
İlişkisel Operatoumlrler
(=x 1) x 1 ise true doumlnduumlruumlr
(ltx y) x yden kuumlccediluumlkse true doumlnduumlruumlr
(gtx y) x y den buumlyuumlkse true doumlnduumlruumlr
(lt=x y) x yden kuku veya eĢitse true doumlnduumlruumlr
(gt=x y) x yden buumlyuumlk veya eĢitse true doumlnduumlruumlr
(eq x y) x ve y aynı ise true doumlnduumlruumlr
(equal x y) x ve y aynı yapıda olup aynı iccedileriğe sahipse true doumlnduumlruumlr
Tip Yuumlklemeleri
(procedure x)X fonksiyon ise true doumlnduumlruumlr
(null x) X boĢ bir liste ise true doumlnduumlruumlr
(zero x )X sıfır ise true doumlnduumlruumlr
(odd x) X tek ise true doumlnduumlruumlr
(even x) X tek ise true doumlnduumlruumlr
(symbolx) X tek ise true doumlnduumlruumlr
Asal Sayı Bulma Programı
(Define (divides m n)
(Cond
[(zero m) true]
[(amplt m n) false]
[else (divides (- m n) n)]
))
(Define (check-prime prime-cand divisor)
(cond
[(= 1 divisor) true]
[(divides prime-cand divisor) false]
[else (check-prime prime-cand (sub1 divisor))]))
(define (prime x)
(cond
[(= x 0) false]
[(= x 1) false]
[else (check-prime x (- x 1))]
))
KAYNAKLAR
wwwbilgisayarkavramlaricom
httpe-bergicom2010OcakScheme
httpwwwhtdporg2003ndash09ndash26Bookcurriculum-Z-H-1html
httptranslategooglecomtrtranslatehl=tramplangpair=en7Ctrampu=http httpprogramming-musingsorg20091223scheme-lectures-mostly httptranslategooglecomtrtranslatehl=trampsl=enampu=http3A2F2Fw
httpblogyollucomtagscheme
httpwwwschemecomtspl4 httpracket-langorgdownload
PROJE KONUSU SCHEME DİLİNİN OZELİKLERİNİ TAŞIYAN VE BU PDF DE
ANLATILAN KONULAR İLGİLİ 10 SORU HAZIRLANIP BUNLARIN CEVAPLARINI
KULANICIDAN İSTENİLMESİ
PROJEDE KULANILANLAR
LİSTE
FONKSİYON
KOŞUL CUumlMLESİ
DEĞER ATAMALARI
PROJE KODU
(define k 0)
(define doğrular 0)
(define yanlışlar 0)
sorular
(define a 1soru Lamda nedir)
(define A1 1 isimsiz fonksiyonları belirler)
(define B1 2 değer ataması yapar)
(define C1 3 pointer goumlrevi yapar)
(define b 2soru hangisi aritmetik fonksiyon değildir)
(define A2 1 SQRT )
(define B2 2 MIN )
(define C2 3 QUOTE )
(define c 3soru=list kulanımı nasıldır)
(define A3 (1 LIST (A) (B) (C) (D)))
(define B3 (2 LIST A B C D) )
(define C3 (3 LIST A B C D) )
(define d 4soru=equalsimp ne demek)
(define A4 1 iki basit liste alır ve eşitliğini kontrol eder)
(define B4 2 listeleri birbirine atar)
(define C4 3 listeleri eşitler)
(define e1 5soru=append ne işe yarar)
(define A5 1 İki listeyi peş peşe ekler)
(define B5 2 iki listeyi ccedilıkarır)
(define C5 3 iki listeyi ccedilarpar)
(define f 6soru set isimlere değer atar doğrumudur)
(define A6 1 doğru)
(define B6 2 yanlis)
doğru cevap listesi
(define DListe (list 1 1 1 2 3 1) )
şıkları yazdırma
(define (Cevaplar cevapListesi)
( cond [(null cevapListesi) 0]
[else (Cevaplar (rest cevapListesi))
(display (first cevapListesi))
(display n)
]))
doğru yanlış kontroluuml
(define kon
(lambda (k FDL)
(cond ((= k FDL) (display Tebrikler )nn)(set dogrular (+ 1 dogrular)))
else ( display Maalesef olmadı (nn)(set yanlislar (+ 1 yanlislar))])))
soru ve şıkları yazdırıp cevap kontroluumlnuuml ccedilağırma
(define (Sorular soruListesi cevpListesi DListesi )
( cond [(null soruListesi) 0]
[else
(Sorular (rest soruListesi) (rest cevpListesi) (rest DListesi ))
(display (first soruListesi))
(display n)
(Cevaplar (first cevpListesi)) (set k (read)) (kon k (first DListesi)) ]))
şık listesi
(define CListe (list(list B6 A6) (list C5 B5 A5) (list C4 B4 A4) (list C3 B3 A3) (list C2 B2
A2)(list C1 B1 A1)))
Sorular fonksiyonunu ccedilağırma
(Sorular (list f e1 d c b a) CListe DListe )
yapılan doğru ve yanlış sayısını goumlsterme
(display Doğru cevap sayısı )
dogrular
(display Yanlış cevap sayısı )
yanlislar
EMEĞİ GECcedilEN BUumlTUumlN HERKESE TEŞEKUumlRLERİMİZİ SUNUYORUZhellip
VIEW MENUumlSUuml
mdashHIDE DEFINITION kodların yazıldığı ekranı gizler(uumlst kısım)
mdashHIDE INTERACTION ccedilıktıların yazılı olduğu ekranı gizler(alt kısım)
mdashUSE HORIZONTAL LAYOUT editoumlruumlmuumlzdeki alttaki kısmı yanda goumlsterir
mdashSHOW PROGRAM COUNTER definition kısmındaki kodların toplu
goumlruumlnduumlğuuml ekranı getirir
mdashTOOLBAR
mdash TOOLBAR ON LEFT toolbarı solda goumlsterir mdash TOOLBAR ON RIGHT toolbarı sağda goumlsterir mdash TOOLBAR ON TOP toolbarı tepede goumlsterir mdash TOOLBAR ON HIDDEN toolbarı tamamen saklar mdashSHOW LĠNE NUMBERS sol tarafta satırlara sıra no verir
mdashSPLIT ekranın uumlst kısmını 2 ye ayırır(alt alta)
mdashCOLLAPSE ekranı eski haline getirir
LANGUAGE MENUumlSUuml
mdashCHOOSE LANGUAGE dil seccedilimi yapmayı sağlar Kullanıcı seviyesine goumlre dili seccediler Bazı
komutlar her dilde ccedilalıĢmamaktadır Oumlrnegin
BEGINNING STUDENT seccedilildiğinde Display komutu ccedilalıĢmaz
PRETTY BIG seccedilildiğinde ccedilalıĢır
RACKET MENUumlSUuml
mdashRUN programı ccedilalıĢtırır
mdashLIMIT MEMORY -unlimited
mdashlimited
Bu oumlzellikle varsayılan limit(128mb) olan bu hafızayı
değiĢtirebiliyoruz Boumlylece proje bize lazım olan hafıza kadar yer tutuyor
fazlasını tutmuyor
mdashCREATE EXECUTABLE Exe oluĢturmamızı sağlar
mdashCOMMENT OUT WĠTH A BOX kutu iccedilinde yorum satırı oluĢturmamızı
sağlar
mdashCOMMENT OUT WĠTH SEMĠCOLONS ( ) noktalı virguumll kullanarak yorum
satırı oluĢturmamızı sağlar
INSERT MENUumlSUuml
mdashINSERT COMMENT BOX kutu iccedilinde yorum satırı eklemeyi sağlar
mdashINSERT IMAGE resim eklenir
mdashINSERT FRACTION kesirli sayı oluĢturmak iccedilin kullanılır
mdashCHECK SYNTAX yazım hatalarını kontrol eder
mdashMACRO STEPPER kodu satır ccedilalıĢtırarak ilerler C taki F11 tuĢu gibi
ccedilalıĢır
Editoumlr uumlzerinde ise
Sağ alttaki ccedilarpı alt ekranı kapatmamızı sağlar
Sağ alt koumlĢedeki sayılar imlecin bulunduğu satır ve suumltunu goumlsterir
Sol altta seccediltiğimiz dil yazılıdır Uumlzerine tıkladığımızda daha oumlnceden
kullandığımız dillerin listesi goumlruumlnuumlr
DOSYA İŞLEMLERİ
Open-input-file Okunacak dosyayı accedilar
Open-output-file Yazılacak dosyayı accedilarDosya oumlnceden oluĢturulmamıĢsa oluĢturur
Close-input-port Input dosyasını kapatır
Close-output-port Output dosyasını kapatır
Read-char Dosyadan bir karakter okuduktan sonra imleci diğer karaktere taĢır Peek-char read-charlsquodan farkı imleci taĢımaz
Read-string Belirtilen sayı kadar karakter okur
Read-line Satır okur
Write Dosyaya string ifadeyi tırnak iĢaretleriyle birlikte yazar
Display Dosyaya string ifadeyi tırnak iĢaretleri olmadan yazar
Write-string Dosyaya string ifadeyi tırnak iĢaretleri olmadan yazar ayrıca karakter saysını
alt ekranda goumlsterir
With-input-from-file with-output-to-file Dosya accedilma kapatma iĢlemini otomatik yapıp
verilen proseduumlruuml uygular
Oumlrnek kodlar
Dosyadan okuma
Dosyada Scheme is fun
Write with Schemelsquo yazılıdır
(define p (open-input-file testtxt)) (read p)
(read-line p)
(read-string 300 p)
(close-input-port p) Ccedilıktısı Scheme is funr
Write with Scheme
----------------------
(with-input-from-file testtxt
(lambda ()
(read) ))
Ccedilıktısı Scheme
Dosyaya yazma
(define y merhaba)
(define p (open-output-file testtxt))
(write y p)
(display y p)
(write ifade p )
(write-char k p)
(close-output-port p)
-------------------------
(with-output-to-file test2txt
(lambda ()
(display Hello world) ))
---------------------------
KULLANICI ETKİLEŞİMİ
Bu dilde fonksiyonlar değiĢkenlere değer olarak atanan veya fonksiyonlara
delil olarak geccedilirilebilir Schemelsquode Scheme kodunu oluĢturan ve
yorumlanmasını(interpretation) isteyen bir fonksiyon tanımlamak muumlmkuumlnduumlr
Bu muumlmkuumlnduumlr ccediluumlnkuuml yorumlayıcı(interpreter) kullanıcı tarafından
eriĢilebilen(user-available) bir fonksiyondur Fonksiyonel dillerin tasarımı
Matematiksel Fonksiyonlara dayalıdır
Kullanıcıya da yakın olan sağlam bir teorik temel fakat nispeten programların
koĢacağı makinelerin mimarileriyle ilgisizdir
Schemelsquoi ayrıca diğer dillerden ayıra en oumlnemli oumlzelliklerden biri de ccedilalıĢma
esnasında uygulamaya muumldahale edebilme iznini vermesidir Bu oumlzellik
sadece oumlnceden derlenmiĢ ve ağır plug-inler aracılığı ile geniĢletilen
uygulamalara kıyasla ccedilok daha buumlyuumlk bir avantaj
FONKSİYONLAR
Bu dilde fonksiyonlar birinci-sınıf varlıklardır(entities)
ndashĠfadelerin(expressions) değerleri ve listelerin elemanları olabilirler
ndashDeğiĢkenlere(variables) atanabilirler ve parametrelere geccedililebilirler
Scheme dilindeki formlar ikiye ayrılır
Temel Formlar define lambda if quote unquote unquote-splicing
quasiquote define-syntax let-syntax letrec-syntax syntax-rules set
( 5 4) sonuccedil olarak karĢımıza ccedilikacaktir
Ifadesi de yorum satırı haline getirir kodu
Ġf deyimini oumlrnekle accedilıklayalım
(If lsaquo expr rsaquo lsaquoexpr rsaquo lsaquoexpr rsaquo)
(If (= (+ 4 5) 9) t f)
Burada ilk verdiğimiz arguumlman (= (+ 4 5) 9) iĢleminin doğru olup
olmadığına bakar Eğer iĢlem doğruysa ccedilıktı olarak t yanlıĢsa f doumlner
Anlayacağınız uumlzere bu oumlzel durum proseduumlruuml koĢul gerektiren bir proseduumlr
bu durumda ilk verdiğimiz arguumlman da koĢulu belirleyen parccedila oluyor Oumlnce
o koĢulu inceleyen yorumlayıcı da daha sonra verdiğimiz diğer arguumlmanları
koĢula goumlre seccedilerek bize gereken ccedilıktıyı veriyor
Cond deyimi( cond[ltİfadegt ltİfadegt] )
Bir soruya dayalı alternatif cevapları seccedilmek istiyorsanız cond ifadesi kullanılır
ġart ifadesidir
Cond Ģeklinde koumlĢeli parantez maddeler dizisi iccedilerir
(Cond
((ltSıcaklık 50) Soğuk)
((gt Sıcaklık 90) Ccedilok sıcak )
(else Sorun yok))
Ayrıca else Scheme dilinde cond ifadesiyle kullanılır diğer dillerde olduğu gibi if
le değil Else ifadesi ise diğer koĢullar olmadığında else koĢulu olacaktır
Do ifadesi
(do ((i 0 (+ i 1))) ((gt i 2)) (display i) (newline))
Programın ccedilıktısı
0
1
2 dir Ġlk oumlnce i ye 0 atıyor ve i yi 1 er 1 er artırarak i 2 den buumlyuumlk olana
kadar doumlnduumlruumlyor display ile de ekrana yazdırıyornewline satırı ilede bir alt
satıra geccediliyor
While ifadesi
(While (koĢul ))
(Deyim1)
(Deyim2)
)
Let ifadesi
(let ((x 5)) ( x 2))
Ekran ccedilıktısı ise 10 olurLet yanındaki ilk koĢul ifadesinde değer ataması
yapılır ve diğer ifadede de matematiksel iĢlemi gerccedilekleĢtirir
Listeler
List fonksiyonu herhangi bir sayı alır ve değerlerini iccedileren bir liste doumlnduumlruumlr
gt(listKırmızı YeĢil Mavi)
(Kırmızı yeĢilmavi)
gt(list 1 2 3 4 5)
(1 2 3 4 5)
LIST
ndash Herhangi bir sayıda parametre alır elemanları bu parametreler olan bir liste
doumlnduumlruumlr
Ayrıca Bizim listelerde bulmak iccedilin uğraĢtığımız problemler iccedilin direk
fonksiyonlar var Mesela
first listenin ilk elemanını alır
Rest listenin ilk elemanı haricindekileri alır
gt (first (list 1 2 3 ))
1
gt(rest (list 1 2 3 ))
2 3
Listeler iccedilin bir oumlrnek daha
gt( list ( list 1 2 3 ) 5 (list a b c) )
((1 2 3) 5 (a b c))
Hello World Uygulaması
Programlamaya ilk baslayan herkesin yaptığı gibi bizde scheme dilinde
ekrana ―hello world yazdiralimScheme dilinde farkli seviyelerde farklı kodlar
kullanilirPretty Big de hemen hemen buumltuumln kodlar ccedilalıĢtığı iccedilin biz genelde bu
level ı kullaniyoruz
Display ―Hello World
(write Hello World )
―Hello World
Yukarı da goumlruumllen kodlar ccedilalıĢtırıldığında aynı ekran ccedilıktısına sahip
olurlarGoumlruumllduumlğuuml gibi ne noktalı virguumll nede fazla kelimeye gerek kalmıyor
Matematik Fonksiyonları
(Exp x) e^x in sonucunu doumlnduumlruumlr
(Log x) x sayısının logaritma değerini doumlnduumlruumlr
(sqrt x) x koumlkuumlnuumln karesini doumlnduumlruumlr
(max x1 x2) verilen listeden en buumlyuumlk sayıyı doumlnduumlruumlr
(min x1 x2) verilen listeden en kuku sayıyı doumlnduumlruumlr
(quotient x1 x2) x1x2 kesrinin boumlluumlmuumlnuuml doumlnduumlruumlr
(remian x1 x2) x1x2 kesrinin kalanini doumlnduumlruumlr
(modula x1 x2) x1 in x2 ye moduumlluuml sonucunu doumlnduumlruumlr
(gcm num1 num2 ) Verilen listenin en buumlyuumlk ortak boumlleni doumlnduumlruumlr
(lcm num1 num2 ) Verilen listenin en kuku ortak ccedilarpanı doumlnduumlruumlr
(Ceiling x) x ten kuku olmayan en kuku değeri doumlnduumlruumlr
( turn cate x) Mutlak değeri x in mutlak değerinden buumlyuumlk olmayan Xlsquo en
yakın değeri doumlnduumlruumlr
(round x) xe en yakın değere yuvarlıyor
İlişkisel Operatoumlrler
(=x 1) x 1 ise true doumlnduumlruumlr
(ltx y) x yden kuumlccediluumlkse true doumlnduumlruumlr
(gtx y) x y den buumlyuumlkse true doumlnduumlruumlr
(lt=x y) x yden kuku veya eĢitse true doumlnduumlruumlr
(gt=x y) x yden buumlyuumlk veya eĢitse true doumlnduumlruumlr
(eq x y) x ve y aynı ise true doumlnduumlruumlr
(equal x y) x ve y aynı yapıda olup aynı iccedileriğe sahipse true doumlnduumlruumlr
Tip Yuumlklemeleri
(procedure x)X fonksiyon ise true doumlnduumlruumlr
(null x) X boĢ bir liste ise true doumlnduumlruumlr
(zero x )X sıfır ise true doumlnduumlruumlr
(odd x) X tek ise true doumlnduumlruumlr
(even x) X tek ise true doumlnduumlruumlr
(symbolx) X tek ise true doumlnduumlruumlr
Asal Sayı Bulma Programı
(Define (divides m n)
(Cond
[(zero m) true]
[(amplt m n) false]
[else (divides (- m n) n)]
))
(Define (check-prime prime-cand divisor)
(cond
[(= 1 divisor) true]
[(divides prime-cand divisor) false]
[else (check-prime prime-cand (sub1 divisor))]))
(define (prime x)
(cond
[(= x 0) false]
[(= x 1) false]
[else (check-prime x (- x 1))]
))
KAYNAKLAR
wwwbilgisayarkavramlaricom
httpe-bergicom2010OcakScheme
httpwwwhtdporg2003ndash09ndash26Bookcurriculum-Z-H-1html
httptranslategooglecomtrtranslatehl=tramplangpair=en7Ctrampu=http httpprogramming-musingsorg20091223scheme-lectures-mostly httptranslategooglecomtrtranslatehl=trampsl=enampu=http3A2F2Fw
httpblogyollucomtagscheme
httpwwwschemecomtspl4 httpracket-langorgdownload
PROJE KONUSU SCHEME DİLİNİN OZELİKLERİNİ TAŞIYAN VE BU PDF DE
ANLATILAN KONULAR İLGİLİ 10 SORU HAZIRLANIP BUNLARIN CEVAPLARINI
KULANICIDAN İSTENİLMESİ
PROJEDE KULANILANLAR
LİSTE
FONKSİYON
KOŞUL CUumlMLESİ
DEĞER ATAMALARI
PROJE KODU
(define k 0)
(define doğrular 0)
(define yanlışlar 0)
sorular
(define a 1soru Lamda nedir)
(define A1 1 isimsiz fonksiyonları belirler)
(define B1 2 değer ataması yapar)
(define C1 3 pointer goumlrevi yapar)
(define b 2soru hangisi aritmetik fonksiyon değildir)
(define A2 1 SQRT )
(define B2 2 MIN )
(define C2 3 QUOTE )
(define c 3soru=list kulanımı nasıldır)
(define A3 (1 LIST (A) (B) (C) (D)))
(define B3 (2 LIST A B C D) )
(define C3 (3 LIST A B C D) )
(define d 4soru=equalsimp ne demek)
(define A4 1 iki basit liste alır ve eşitliğini kontrol eder)
(define B4 2 listeleri birbirine atar)
(define C4 3 listeleri eşitler)
(define e1 5soru=append ne işe yarar)
(define A5 1 İki listeyi peş peşe ekler)
(define B5 2 iki listeyi ccedilıkarır)
(define C5 3 iki listeyi ccedilarpar)
(define f 6soru set isimlere değer atar doğrumudur)
(define A6 1 doğru)
(define B6 2 yanlis)
doğru cevap listesi
(define DListe (list 1 1 1 2 3 1) )
şıkları yazdırma
(define (Cevaplar cevapListesi)
( cond [(null cevapListesi) 0]
[else (Cevaplar (rest cevapListesi))
(display (first cevapListesi))
(display n)
]))
doğru yanlış kontroluuml
(define kon
(lambda (k FDL)
(cond ((= k FDL) (display Tebrikler )nn)(set dogrular (+ 1 dogrular)))
else ( display Maalesef olmadı (nn)(set yanlislar (+ 1 yanlislar))])))
soru ve şıkları yazdırıp cevap kontroluumlnuuml ccedilağırma
(define (Sorular soruListesi cevpListesi DListesi )
( cond [(null soruListesi) 0]
[else
(Sorular (rest soruListesi) (rest cevpListesi) (rest DListesi ))
(display (first soruListesi))
(display n)
(Cevaplar (first cevpListesi)) (set k (read)) (kon k (first DListesi)) ]))
şık listesi
(define CListe (list(list B6 A6) (list C5 B5 A5) (list C4 B4 A4) (list C3 B3 A3) (list C2 B2
A2)(list C1 B1 A1)))
Sorular fonksiyonunu ccedilağırma
(Sorular (list f e1 d c b a) CListe DListe )
yapılan doğru ve yanlış sayısını goumlsterme
(display Doğru cevap sayısı )
dogrular
(display Yanlış cevap sayısı )
yanlislar
EMEĞİ GECcedilEN BUumlTUumlN HERKESE TEŞEKUumlRLERİMİZİ SUNUYORUZhellip
LANGUAGE MENUumlSUuml
mdashCHOOSE LANGUAGE dil seccedilimi yapmayı sağlar Kullanıcı seviyesine goumlre dili seccediler Bazı
komutlar her dilde ccedilalıĢmamaktadır Oumlrnegin
BEGINNING STUDENT seccedilildiğinde Display komutu ccedilalıĢmaz
PRETTY BIG seccedilildiğinde ccedilalıĢır
RACKET MENUumlSUuml
mdashRUN programı ccedilalıĢtırır
mdashLIMIT MEMORY -unlimited
mdashlimited
Bu oumlzellikle varsayılan limit(128mb) olan bu hafızayı
değiĢtirebiliyoruz Boumlylece proje bize lazım olan hafıza kadar yer tutuyor
fazlasını tutmuyor
mdashCREATE EXECUTABLE Exe oluĢturmamızı sağlar
mdashCOMMENT OUT WĠTH A BOX kutu iccedilinde yorum satırı oluĢturmamızı
sağlar
mdashCOMMENT OUT WĠTH SEMĠCOLONS ( ) noktalı virguumll kullanarak yorum
satırı oluĢturmamızı sağlar
INSERT MENUumlSUuml
mdashINSERT COMMENT BOX kutu iccedilinde yorum satırı eklemeyi sağlar
mdashINSERT IMAGE resim eklenir
mdashINSERT FRACTION kesirli sayı oluĢturmak iccedilin kullanılır
mdashCHECK SYNTAX yazım hatalarını kontrol eder
mdashMACRO STEPPER kodu satır ccedilalıĢtırarak ilerler C taki F11 tuĢu gibi
ccedilalıĢır
Editoumlr uumlzerinde ise
Sağ alttaki ccedilarpı alt ekranı kapatmamızı sağlar
Sağ alt koumlĢedeki sayılar imlecin bulunduğu satır ve suumltunu goumlsterir
Sol altta seccediltiğimiz dil yazılıdır Uumlzerine tıkladığımızda daha oumlnceden
kullandığımız dillerin listesi goumlruumlnuumlr
DOSYA İŞLEMLERİ
Open-input-file Okunacak dosyayı accedilar
Open-output-file Yazılacak dosyayı accedilarDosya oumlnceden oluĢturulmamıĢsa oluĢturur
Close-input-port Input dosyasını kapatır
Close-output-port Output dosyasını kapatır
Read-char Dosyadan bir karakter okuduktan sonra imleci diğer karaktere taĢır Peek-char read-charlsquodan farkı imleci taĢımaz
Read-string Belirtilen sayı kadar karakter okur
Read-line Satır okur
Write Dosyaya string ifadeyi tırnak iĢaretleriyle birlikte yazar
Display Dosyaya string ifadeyi tırnak iĢaretleri olmadan yazar
Write-string Dosyaya string ifadeyi tırnak iĢaretleri olmadan yazar ayrıca karakter saysını
alt ekranda goumlsterir
With-input-from-file with-output-to-file Dosya accedilma kapatma iĢlemini otomatik yapıp
verilen proseduumlruuml uygular
Oumlrnek kodlar
Dosyadan okuma
Dosyada Scheme is fun
Write with Schemelsquo yazılıdır
(define p (open-input-file testtxt)) (read p)
(read-line p)
(read-string 300 p)
(close-input-port p) Ccedilıktısı Scheme is funr
Write with Scheme
----------------------
(with-input-from-file testtxt
(lambda ()
(read) ))
Ccedilıktısı Scheme
Dosyaya yazma
(define y merhaba)
(define p (open-output-file testtxt))
(write y p)
(display y p)
(write ifade p )
(write-char k p)
(close-output-port p)
-------------------------
(with-output-to-file test2txt
(lambda ()
(display Hello world) ))
---------------------------
KULLANICI ETKİLEŞİMİ
Bu dilde fonksiyonlar değiĢkenlere değer olarak atanan veya fonksiyonlara
delil olarak geccedilirilebilir Schemelsquode Scheme kodunu oluĢturan ve
yorumlanmasını(interpretation) isteyen bir fonksiyon tanımlamak muumlmkuumlnduumlr
Bu muumlmkuumlnduumlr ccediluumlnkuuml yorumlayıcı(interpreter) kullanıcı tarafından
eriĢilebilen(user-available) bir fonksiyondur Fonksiyonel dillerin tasarımı
Matematiksel Fonksiyonlara dayalıdır
Kullanıcıya da yakın olan sağlam bir teorik temel fakat nispeten programların
koĢacağı makinelerin mimarileriyle ilgisizdir
Schemelsquoi ayrıca diğer dillerden ayıra en oumlnemli oumlzelliklerden biri de ccedilalıĢma
esnasında uygulamaya muumldahale edebilme iznini vermesidir Bu oumlzellik
sadece oumlnceden derlenmiĢ ve ağır plug-inler aracılığı ile geniĢletilen
uygulamalara kıyasla ccedilok daha buumlyuumlk bir avantaj
FONKSİYONLAR
Bu dilde fonksiyonlar birinci-sınıf varlıklardır(entities)
ndashĠfadelerin(expressions) değerleri ve listelerin elemanları olabilirler
ndashDeğiĢkenlere(variables) atanabilirler ve parametrelere geccedililebilirler
Scheme dilindeki formlar ikiye ayrılır
Temel Formlar define lambda if quote unquote unquote-splicing
quasiquote define-syntax let-syntax letrec-syntax syntax-rules set
( 5 4) sonuccedil olarak karĢımıza ccedilikacaktir
Ifadesi de yorum satırı haline getirir kodu
Ġf deyimini oumlrnekle accedilıklayalım
(If lsaquo expr rsaquo lsaquoexpr rsaquo lsaquoexpr rsaquo)
(If (= (+ 4 5) 9) t f)
Burada ilk verdiğimiz arguumlman (= (+ 4 5) 9) iĢleminin doğru olup
olmadığına bakar Eğer iĢlem doğruysa ccedilıktı olarak t yanlıĢsa f doumlner
Anlayacağınız uumlzere bu oumlzel durum proseduumlruuml koĢul gerektiren bir proseduumlr
bu durumda ilk verdiğimiz arguumlman da koĢulu belirleyen parccedila oluyor Oumlnce
o koĢulu inceleyen yorumlayıcı da daha sonra verdiğimiz diğer arguumlmanları
koĢula goumlre seccedilerek bize gereken ccedilıktıyı veriyor
Cond deyimi( cond[ltİfadegt ltİfadegt] )
Bir soruya dayalı alternatif cevapları seccedilmek istiyorsanız cond ifadesi kullanılır
ġart ifadesidir
Cond Ģeklinde koumlĢeli parantez maddeler dizisi iccedilerir
(Cond
((ltSıcaklık 50) Soğuk)
((gt Sıcaklık 90) Ccedilok sıcak )
(else Sorun yok))
Ayrıca else Scheme dilinde cond ifadesiyle kullanılır diğer dillerde olduğu gibi if
le değil Else ifadesi ise diğer koĢullar olmadığında else koĢulu olacaktır
Do ifadesi
(do ((i 0 (+ i 1))) ((gt i 2)) (display i) (newline))
Programın ccedilıktısı
0
1
2 dir Ġlk oumlnce i ye 0 atıyor ve i yi 1 er 1 er artırarak i 2 den buumlyuumlk olana
kadar doumlnduumlruumlyor display ile de ekrana yazdırıyornewline satırı ilede bir alt
satıra geccediliyor
While ifadesi
(While (koĢul ))
(Deyim1)
(Deyim2)
)
Let ifadesi
(let ((x 5)) ( x 2))
Ekran ccedilıktısı ise 10 olurLet yanındaki ilk koĢul ifadesinde değer ataması
yapılır ve diğer ifadede de matematiksel iĢlemi gerccedilekleĢtirir
Listeler
List fonksiyonu herhangi bir sayı alır ve değerlerini iccedileren bir liste doumlnduumlruumlr
gt(listKırmızı YeĢil Mavi)
(Kırmızı yeĢilmavi)
gt(list 1 2 3 4 5)
(1 2 3 4 5)
LIST
ndash Herhangi bir sayıda parametre alır elemanları bu parametreler olan bir liste
doumlnduumlruumlr
Ayrıca Bizim listelerde bulmak iccedilin uğraĢtığımız problemler iccedilin direk
fonksiyonlar var Mesela
first listenin ilk elemanını alır
Rest listenin ilk elemanı haricindekileri alır
gt (first (list 1 2 3 ))
1
gt(rest (list 1 2 3 ))
2 3
Listeler iccedilin bir oumlrnek daha
gt( list ( list 1 2 3 ) 5 (list a b c) )
((1 2 3) 5 (a b c))
Hello World Uygulaması
Programlamaya ilk baslayan herkesin yaptığı gibi bizde scheme dilinde
ekrana ―hello world yazdiralimScheme dilinde farkli seviyelerde farklı kodlar
kullanilirPretty Big de hemen hemen buumltuumln kodlar ccedilalıĢtığı iccedilin biz genelde bu
level ı kullaniyoruz
Display ―Hello World
(write Hello World )
―Hello World
Yukarı da goumlruumllen kodlar ccedilalıĢtırıldığında aynı ekran ccedilıktısına sahip
olurlarGoumlruumllduumlğuuml gibi ne noktalı virguumll nede fazla kelimeye gerek kalmıyor
Matematik Fonksiyonları
(Exp x) e^x in sonucunu doumlnduumlruumlr
(Log x) x sayısının logaritma değerini doumlnduumlruumlr
(sqrt x) x koumlkuumlnuumln karesini doumlnduumlruumlr
(max x1 x2) verilen listeden en buumlyuumlk sayıyı doumlnduumlruumlr
(min x1 x2) verilen listeden en kuku sayıyı doumlnduumlruumlr
(quotient x1 x2) x1x2 kesrinin boumlluumlmuumlnuuml doumlnduumlruumlr
(remian x1 x2) x1x2 kesrinin kalanini doumlnduumlruumlr
(modula x1 x2) x1 in x2 ye moduumlluuml sonucunu doumlnduumlruumlr
(gcm num1 num2 ) Verilen listenin en buumlyuumlk ortak boumlleni doumlnduumlruumlr
(lcm num1 num2 ) Verilen listenin en kuku ortak ccedilarpanı doumlnduumlruumlr
(Ceiling x) x ten kuku olmayan en kuku değeri doumlnduumlruumlr
( turn cate x) Mutlak değeri x in mutlak değerinden buumlyuumlk olmayan Xlsquo en
yakın değeri doumlnduumlruumlr
(round x) xe en yakın değere yuvarlıyor
İlişkisel Operatoumlrler
(=x 1) x 1 ise true doumlnduumlruumlr
(ltx y) x yden kuumlccediluumlkse true doumlnduumlruumlr
(gtx y) x y den buumlyuumlkse true doumlnduumlruumlr
(lt=x y) x yden kuku veya eĢitse true doumlnduumlruumlr
(gt=x y) x yden buumlyuumlk veya eĢitse true doumlnduumlruumlr
(eq x y) x ve y aynı ise true doumlnduumlruumlr
(equal x y) x ve y aynı yapıda olup aynı iccedileriğe sahipse true doumlnduumlruumlr
Tip Yuumlklemeleri
(procedure x)X fonksiyon ise true doumlnduumlruumlr
(null x) X boĢ bir liste ise true doumlnduumlruumlr
(zero x )X sıfır ise true doumlnduumlruumlr
(odd x) X tek ise true doumlnduumlruumlr
(even x) X tek ise true doumlnduumlruumlr
(symbolx) X tek ise true doumlnduumlruumlr
Asal Sayı Bulma Programı
(Define (divides m n)
(Cond
[(zero m) true]
[(amplt m n) false]
[else (divides (- m n) n)]
))
(Define (check-prime prime-cand divisor)
(cond
[(= 1 divisor) true]
[(divides prime-cand divisor) false]
[else (check-prime prime-cand (sub1 divisor))]))
(define (prime x)
(cond
[(= x 0) false]
[(= x 1) false]
[else (check-prime x (- x 1))]
))
KAYNAKLAR
wwwbilgisayarkavramlaricom
httpe-bergicom2010OcakScheme
httpwwwhtdporg2003ndash09ndash26Bookcurriculum-Z-H-1html
httptranslategooglecomtrtranslatehl=tramplangpair=en7Ctrampu=http httpprogramming-musingsorg20091223scheme-lectures-mostly httptranslategooglecomtrtranslatehl=trampsl=enampu=http3A2F2Fw
httpblogyollucomtagscheme
httpwwwschemecomtspl4 httpracket-langorgdownload
PROJE KONUSU SCHEME DİLİNİN OZELİKLERİNİ TAŞIYAN VE BU PDF DE
ANLATILAN KONULAR İLGİLİ 10 SORU HAZIRLANIP BUNLARIN CEVAPLARINI
KULANICIDAN İSTENİLMESİ
PROJEDE KULANILANLAR
LİSTE
FONKSİYON
KOŞUL CUumlMLESİ
DEĞER ATAMALARI
PROJE KODU
(define k 0)
(define doğrular 0)
(define yanlışlar 0)
sorular
(define a 1soru Lamda nedir)
(define A1 1 isimsiz fonksiyonları belirler)
(define B1 2 değer ataması yapar)
(define C1 3 pointer goumlrevi yapar)
(define b 2soru hangisi aritmetik fonksiyon değildir)
(define A2 1 SQRT )
(define B2 2 MIN )
(define C2 3 QUOTE )
(define c 3soru=list kulanımı nasıldır)
(define A3 (1 LIST (A) (B) (C) (D)))
(define B3 (2 LIST A B C D) )
(define C3 (3 LIST A B C D) )
(define d 4soru=equalsimp ne demek)
(define A4 1 iki basit liste alır ve eşitliğini kontrol eder)
(define B4 2 listeleri birbirine atar)
(define C4 3 listeleri eşitler)
(define e1 5soru=append ne işe yarar)
(define A5 1 İki listeyi peş peşe ekler)
(define B5 2 iki listeyi ccedilıkarır)
(define C5 3 iki listeyi ccedilarpar)
(define f 6soru set isimlere değer atar doğrumudur)
(define A6 1 doğru)
(define B6 2 yanlis)
doğru cevap listesi
(define DListe (list 1 1 1 2 3 1) )
şıkları yazdırma
(define (Cevaplar cevapListesi)
( cond [(null cevapListesi) 0]
[else (Cevaplar (rest cevapListesi))
(display (first cevapListesi))
(display n)
]))
doğru yanlış kontroluuml
(define kon
(lambda (k FDL)
(cond ((= k FDL) (display Tebrikler )nn)(set dogrular (+ 1 dogrular)))
else ( display Maalesef olmadı (nn)(set yanlislar (+ 1 yanlislar))])))
soru ve şıkları yazdırıp cevap kontroluumlnuuml ccedilağırma
(define (Sorular soruListesi cevpListesi DListesi )
( cond [(null soruListesi) 0]
[else
(Sorular (rest soruListesi) (rest cevpListesi) (rest DListesi ))
(display (first soruListesi))
(display n)
(Cevaplar (first cevpListesi)) (set k (read)) (kon k (first DListesi)) ]))
şık listesi
(define CListe (list(list B6 A6) (list C5 B5 A5) (list C4 B4 A4) (list C3 B3 A3) (list C2 B2
A2)(list C1 B1 A1)))
Sorular fonksiyonunu ccedilağırma
(Sorular (list f e1 d c b a) CListe DListe )
yapılan doğru ve yanlış sayısını goumlsterme
(display Doğru cevap sayısı )
dogrular
(display Yanlış cevap sayısı )
yanlislar
EMEĞİ GECcedilEN BUumlTUumlN HERKESE TEŞEKUumlRLERİMİZİ SUNUYORUZhellip
RACKET MENUumlSUuml
mdashRUN programı ccedilalıĢtırır
mdashLIMIT MEMORY -unlimited
mdashlimited
Bu oumlzellikle varsayılan limit(128mb) olan bu hafızayı
değiĢtirebiliyoruz Boumlylece proje bize lazım olan hafıza kadar yer tutuyor
fazlasını tutmuyor
mdashCREATE EXECUTABLE Exe oluĢturmamızı sağlar
mdashCOMMENT OUT WĠTH A BOX kutu iccedilinde yorum satırı oluĢturmamızı
sağlar
mdashCOMMENT OUT WĠTH SEMĠCOLONS ( ) noktalı virguumll kullanarak yorum
satırı oluĢturmamızı sağlar
INSERT MENUumlSUuml
mdashINSERT COMMENT BOX kutu iccedilinde yorum satırı eklemeyi sağlar
mdashINSERT IMAGE resim eklenir
mdashINSERT FRACTION kesirli sayı oluĢturmak iccedilin kullanılır
mdashCHECK SYNTAX yazım hatalarını kontrol eder
mdashMACRO STEPPER kodu satır ccedilalıĢtırarak ilerler C taki F11 tuĢu gibi
ccedilalıĢır
Editoumlr uumlzerinde ise
Sağ alttaki ccedilarpı alt ekranı kapatmamızı sağlar
Sağ alt koumlĢedeki sayılar imlecin bulunduğu satır ve suumltunu goumlsterir
Sol altta seccediltiğimiz dil yazılıdır Uumlzerine tıkladığımızda daha oumlnceden
kullandığımız dillerin listesi goumlruumlnuumlr
DOSYA İŞLEMLERİ
Open-input-file Okunacak dosyayı accedilar
Open-output-file Yazılacak dosyayı accedilarDosya oumlnceden oluĢturulmamıĢsa oluĢturur
Close-input-port Input dosyasını kapatır
Close-output-port Output dosyasını kapatır
Read-char Dosyadan bir karakter okuduktan sonra imleci diğer karaktere taĢır Peek-char read-charlsquodan farkı imleci taĢımaz
Read-string Belirtilen sayı kadar karakter okur
Read-line Satır okur
Write Dosyaya string ifadeyi tırnak iĢaretleriyle birlikte yazar
Display Dosyaya string ifadeyi tırnak iĢaretleri olmadan yazar
Write-string Dosyaya string ifadeyi tırnak iĢaretleri olmadan yazar ayrıca karakter saysını
alt ekranda goumlsterir
With-input-from-file with-output-to-file Dosya accedilma kapatma iĢlemini otomatik yapıp
verilen proseduumlruuml uygular
Oumlrnek kodlar
Dosyadan okuma
Dosyada Scheme is fun
Write with Schemelsquo yazılıdır
(define p (open-input-file testtxt)) (read p)
(read-line p)
(read-string 300 p)
(close-input-port p) Ccedilıktısı Scheme is funr
Write with Scheme
----------------------
(with-input-from-file testtxt
(lambda ()
(read) ))
Ccedilıktısı Scheme
Dosyaya yazma
(define y merhaba)
(define p (open-output-file testtxt))
(write y p)
(display y p)
(write ifade p )
(write-char k p)
(close-output-port p)
-------------------------
(with-output-to-file test2txt
(lambda ()
(display Hello world) ))
---------------------------
KULLANICI ETKİLEŞİMİ
Bu dilde fonksiyonlar değiĢkenlere değer olarak atanan veya fonksiyonlara
delil olarak geccedilirilebilir Schemelsquode Scheme kodunu oluĢturan ve
yorumlanmasını(interpretation) isteyen bir fonksiyon tanımlamak muumlmkuumlnduumlr
Bu muumlmkuumlnduumlr ccediluumlnkuuml yorumlayıcı(interpreter) kullanıcı tarafından
eriĢilebilen(user-available) bir fonksiyondur Fonksiyonel dillerin tasarımı
Matematiksel Fonksiyonlara dayalıdır
Kullanıcıya da yakın olan sağlam bir teorik temel fakat nispeten programların
koĢacağı makinelerin mimarileriyle ilgisizdir
Schemelsquoi ayrıca diğer dillerden ayıra en oumlnemli oumlzelliklerden biri de ccedilalıĢma
esnasında uygulamaya muumldahale edebilme iznini vermesidir Bu oumlzellik
sadece oumlnceden derlenmiĢ ve ağır plug-inler aracılığı ile geniĢletilen
uygulamalara kıyasla ccedilok daha buumlyuumlk bir avantaj
FONKSİYONLAR
Bu dilde fonksiyonlar birinci-sınıf varlıklardır(entities)
ndashĠfadelerin(expressions) değerleri ve listelerin elemanları olabilirler
ndashDeğiĢkenlere(variables) atanabilirler ve parametrelere geccedililebilirler
Scheme dilindeki formlar ikiye ayrılır
Temel Formlar define lambda if quote unquote unquote-splicing
quasiquote define-syntax let-syntax letrec-syntax syntax-rules set
( 5 4) sonuccedil olarak karĢımıza ccedilikacaktir
Ifadesi de yorum satırı haline getirir kodu
Ġf deyimini oumlrnekle accedilıklayalım
(If lsaquo expr rsaquo lsaquoexpr rsaquo lsaquoexpr rsaquo)
(If (= (+ 4 5) 9) t f)
Burada ilk verdiğimiz arguumlman (= (+ 4 5) 9) iĢleminin doğru olup
olmadığına bakar Eğer iĢlem doğruysa ccedilıktı olarak t yanlıĢsa f doumlner
Anlayacağınız uumlzere bu oumlzel durum proseduumlruuml koĢul gerektiren bir proseduumlr
bu durumda ilk verdiğimiz arguumlman da koĢulu belirleyen parccedila oluyor Oumlnce
o koĢulu inceleyen yorumlayıcı da daha sonra verdiğimiz diğer arguumlmanları
koĢula goumlre seccedilerek bize gereken ccedilıktıyı veriyor
Cond deyimi( cond[ltİfadegt ltİfadegt] )
Bir soruya dayalı alternatif cevapları seccedilmek istiyorsanız cond ifadesi kullanılır
ġart ifadesidir
Cond Ģeklinde koumlĢeli parantez maddeler dizisi iccedilerir
(Cond
((ltSıcaklık 50) Soğuk)
((gt Sıcaklık 90) Ccedilok sıcak )
(else Sorun yok))
Ayrıca else Scheme dilinde cond ifadesiyle kullanılır diğer dillerde olduğu gibi if
le değil Else ifadesi ise diğer koĢullar olmadığında else koĢulu olacaktır
Do ifadesi
(do ((i 0 (+ i 1))) ((gt i 2)) (display i) (newline))
Programın ccedilıktısı
0
1
2 dir Ġlk oumlnce i ye 0 atıyor ve i yi 1 er 1 er artırarak i 2 den buumlyuumlk olana
kadar doumlnduumlruumlyor display ile de ekrana yazdırıyornewline satırı ilede bir alt
satıra geccediliyor
While ifadesi
(While (koĢul ))
(Deyim1)
(Deyim2)
)
Let ifadesi
(let ((x 5)) ( x 2))
Ekran ccedilıktısı ise 10 olurLet yanındaki ilk koĢul ifadesinde değer ataması
yapılır ve diğer ifadede de matematiksel iĢlemi gerccedilekleĢtirir
Listeler
List fonksiyonu herhangi bir sayı alır ve değerlerini iccedileren bir liste doumlnduumlruumlr
gt(listKırmızı YeĢil Mavi)
(Kırmızı yeĢilmavi)
gt(list 1 2 3 4 5)
(1 2 3 4 5)
LIST
ndash Herhangi bir sayıda parametre alır elemanları bu parametreler olan bir liste
doumlnduumlruumlr
Ayrıca Bizim listelerde bulmak iccedilin uğraĢtığımız problemler iccedilin direk
fonksiyonlar var Mesela
first listenin ilk elemanını alır
Rest listenin ilk elemanı haricindekileri alır
gt (first (list 1 2 3 ))
1
gt(rest (list 1 2 3 ))
2 3
Listeler iccedilin bir oumlrnek daha
gt( list ( list 1 2 3 ) 5 (list a b c) )
((1 2 3) 5 (a b c))
Hello World Uygulaması
Programlamaya ilk baslayan herkesin yaptığı gibi bizde scheme dilinde
ekrana ―hello world yazdiralimScheme dilinde farkli seviyelerde farklı kodlar
kullanilirPretty Big de hemen hemen buumltuumln kodlar ccedilalıĢtığı iccedilin biz genelde bu
level ı kullaniyoruz
Display ―Hello World
(write Hello World )
―Hello World
Yukarı da goumlruumllen kodlar ccedilalıĢtırıldığında aynı ekran ccedilıktısına sahip
olurlarGoumlruumllduumlğuuml gibi ne noktalı virguumll nede fazla kelimeye gerek kalmıyor
Matematik Fonksiyonları
(Exp x) e^x in sonucunu doumlnduumlruumlr
(Log x) x sayısının logaritma değerini doumlnduumlruumlr
(sqrt x) x koumlkuumlnuumln karesini doumlnduumlruumlr
(max x1 x2) verilen listeden en buumlyuumlk sayıyı doumlnduumlruumlr
(min x1 x2) verilen listeden en kuku sayıyı doumlnduumlruumlr
(quotient x1 x2) x1x2 kesrinin boumlluumlmuumlnuuml doumlnduumlruumlr
(remian x1 x2) x1x2 kesrinin kalanini doumlnduumlruumlr
(modula x1 x2) x1 in x2 ye moduumlluuml sonucunu doumlnduumlruumlr
(gcm num1 num2 ) Verilen listenin en buumlyuumlk ortak boumlleni doumlnduumlruumlr
(lcm num1 num2 ) Verilen listenin en kuku ortak ccedilarpanı doumlnduumlruumlr
(Ceiling x) x ten kuku olmayan en kuku değeri doumlnduumlruumlr
( turn cate x) Mutlak değeri x in mutlak değerinden buumlyuumlk olmayan Xlsquo en
yakın değeri doumlnduumlruumlr
(round x) xe en yakın değere yuvarlıyor
İlişkisel Operatoumlrler
(=x 1) x 1 ise true doumlnduumlruumlr
(ltx y) x yden kuumlccediluumlkse true doumlnduumlruumlr
(gtx y) x y den buumlyuumlkse true doumlnduumlruumlr
(lt=x y) x yden kuku veya eĢitse true doumlnduumlruumlr
(gt=x y) x yden buumlyuumlk veya eĢitse true doumlnduumlruumlr
(eq x y) x ve y aynı ise true doumlnduumlruumlr
(equal x y) x ve y aynı yapıda olup aynı iccedileriğe sahipse true doumlnduumlruumlr
Tip Yuumlklemeleri
(procedure x)X fonksiyon ise true doumlnduumlruumlr
(null x) X boĢ bir liste ise true doumlnduumlruumlr
(zero x )X sıfır ise true doumlnduumlruumlr
(odd x) X tek ise true doumlnduumlruumlr
(even x) X tek ise true doumlnduumlruumlr
(symbolx) X tek ise true doumlnduumlruumlr
Asal Sayı Bulma Programı
(Define (divides m n)
(Cond
[(zero m) true]
[(amplt m n) false]
[else (divides (- m n) n)]
))
(Define (check-prime prime-cand divisor)
(cond
[(= 1 divisor) true]
[(divides prime-cand divisor) false]
[else (check-prime prime-cand (sub1 divisor))]))
(define (prime x)
(cond
[(= x 0) false]
[(= x 1) false]
[else (check-prime x (- x 1))]
))
KAYNAKLAR
wwwbilgisayarkavramlaricom
httpe-bergicom2010OcakScheme
httpwwwhtdporg2003ndash09ndash26Bookcurriculum-Z-H-1html
httptranslategooglecomtrtranslatehl=tramplangpair=en7Ctrampu=http httpprogramming-musingsorg20091223scheme-lectures-mostly httptranslategooglecomtrtranslatehl=trampsl=enampu=http3A2F2Fw
httpblogyollucomtagscheme
httpwwwschemecomtspl4 httpracket-langorgdownload
PROJE KONUSU SCHEME DİLİNİN OZELİKLERİNİ TAŞIYAN VE BU PDF DE
ANLATILAN KONULAR İLGİLİ 10 SORU HAZIRLANIP BUNLARIN CEVAPLARINI
KULANICIDAN İSTENİLMESİ
PROJEDE KULANILANLAR
LİSTE
FONKSİYON
KOŞUL CUumlMLESİ
DEĞER ATAMALARI
PROJE KODU
(define k 0)
(define doğrular 0)
(define yanlışlar 0)
sorular
(define a 1soru Lamda nedir)
(define A1 1 isimsiz fonksiyonları belirler)
(define B1 2 değer ataması yapar)
(define C1 3 pointer goumlrevi yapar)
(define b 2soru hangisi aritmetik fonksiyon değildir)
(define A2 1 SQRT )
(define B2 2 MIN )
(define C2 3 QUOTE )
(define c 3soru=list kulanımı nasıldır)
(define A3 (1 LIST (A) (B) (C) (D)))
(define B3 (2 LIST A B C D) )
(define C3 (3 LIST A B C D) )
(define d 4soru=equalsimp ne demek)
(define A4 1 iki basit liste alır ve eşitliğini kontrol eder)
(define B4 2 listeleri birbirine atar)
(define C4 3 listeleri eşitler)
(define e1 5soru=append ne işe yarar)
(define A5 1 İki listeyi peş peşe ekler)
(define B5 2 iki listeyi ccedilıkarır)
(define C5 3 iki listeyi ccedilarpar)
(define f 6soru set isimlere değer atar doğrumudur)
(define A6 1 doğru)
(define B6 2 yanlis)
doğru cevap listesi
(define DListe (list 1 1 1 2 3 1) )
şıkları yazdırma
(define (Cevaplar cevapListesi)
( cond [(null cevapListesi) 0]
[else (Cevaplar (rest cevapListesi))
(display (first cevapListesi))
(display n)
]))
doğru yanlış kontroluuml
(define kon
(lambda (k FDL)
(cond ((= k FDL) (display Tebrikler )nn)(set dogrular (+ 1 dogrular)))
else ( display Maalesef olmadı (nn)(set yanlislar (+ 1 yanlislar))])))
soru ve şıkları yazdırıp cevap kontroluumlnuuml ccedilağırma
(define (Sorular soruListesi cevpListesi DListesi )
( cond [(null soruListesi) 0]
[else
(Sorular (rest soruListesi) (rest cevpListesi) (rest DListesi ))
(display (first soruListesi))
(display n)
(Cevaplar (first cevpListesi)) (set k (read)) (kon k (first DListesi)) ]))
şık listesi
(define CListe (list(list B6 A6) (list C5 B5 A5) (list C4 B4 A4) (list C3 B3 A3) (list C2 B2
A2)(list C1 B1 A1)))
Sorular fonksiyonunu ccedilağırma
(Sorular (list f e1 d c b a) CListe DListe )
yapılan doğru ve yanlış sayısını goumlsterme
(display Doğru cevap sayısı )
dogrular
(display Yanlış cevap sayısı )
yanlislar
EMEĞİ GECcedilEN BUumlTUumlN HERKESE TEŞEKUumlRLERİMİZİ SUNUYORUZhellip
mdashCOMMENT OUT WĠTH A BOX kutu iccedilinde yorum satırı oluĢturmamızı
sağlar
mdashCOMMENT OUT WĠTH SEMĠCOLONS ( ) noktalı virguumll kullanarak yorum
satırı oluĢturmamızı sağlar
INSERT MENUumlSUuml
mdashINSERT COMMENT BOX kutu iccedilinde yorum satırı eklemeyi sağlar
mdashINSERT IMAGE resim eklenir
mdashINSERT FRACTION kesirli sayı oluĢturmak iccedilin kullanılır
mdashCHECK SYNTAX yazım hatalarını kontrol eder
mdashMACRO STEPPER kodu satır ccedilalıĢtırarak ilerler C taki F11 tuĢu gibi
ccedilalıĢır
Editoumlr uumlzerinde ise
Sağ alttaki ccedilarpı alt ekranı kapatmamızı sağlar
Sağ alt koumlĢedeki sayılar imlecin bulunduğu satır ve suumltunu goumlsterir
Sol altta seccediltiğimiz dil yazılıdır Uumlzerine tıkladığımızda daha oumlnceden
kullandığımız dillerin listesi goumlruumlnuumlr
DOSYA İŞLEMLERİ
Open-input-file Okunacak dosyayı accedilar
Open-output-file Yazılacak dosyayı accedilarDosya oumlnceden oluĢturulmamıĢsa oluĢturur
Close-input-port Input dosyasını kapatır
Close-output-port Output dosyasını kapatır
Read-char Dosyadan bir karakter okuduktan sonra imleci diğer karaktere taĢır Peek-char read-charlsquodan farkı imleci taĢımaz
Read-string Belirtilen sayı kadar karakter okur
Read-line Satır okur
Write Dosyaya string ifadeyi tırnak iĢaretleriyle birlikte yazar
Display Dosyaya string ifadeyi tırnak iĢaretleri olmadan yazar
Write-string Dosyaya string ifadeyi tırnak iĢaretleri olmadan yazar ayrıca karakter saysını
alt ekranda goumlsterir
With-input-from-file with-output-to-file Dosya accedilma kapatma iĢlemini otomatik yapıp
verilen proseduumlruuml uygular
Oumlrnek kodlar
Dosyadan okuma
Dosyada Scheme is fun
Write with Schemelsquo yazılıdır
(define p (open-input-file testtxt)) (read p)
(read-line p)
(read-string 300 p)
(close-input-port p) Ccedilıktısı Scheme is funr
Write with Scheme
----------------------
(with-input-from-file testtxt
(lambda ()
(read) ))
Ccedilıktısı Scheme
Dosyaya yazma
(define y merhaba)
(define p (open-output-file testtxt))
(write y p)
(display y p)
(write ifade p )
(write-char k p)
(close-output-port p)
-------------------------
(with-output-to-file test2txt
(lambda ()
(display Hello world) ))
---------------------------
KULLANICI ETKİLEŞİMİ
Bu dilde fonksiyonlar değiĢkenlere değer olarak atanan veya fonksiyonlara
delil olarak geccedilirilebilir Schemelsquode Scheme kodunu oluĢturan ve
yorumlanmasını(interpretation) isteyen bir fonksiyon tanımlamak muumlmkuumlnduumlr
Bu muumlmkuumlnduumlr ccediluumlnkuuml yorumlayıcı(interpreter) kullanıcı tarafından
eriĢilebilen(user-available) bir fonksiyondur Fonksiyonel dillerin tasarımı
Matematiksel Fonksiyonlara dayalıdır
Kullanıcıya da yakın olan sağlam bir teorik temel fakat nispeten programların
koĢacağı makinelerin mimarileriyle ilgisizdir
Schemelsquoi ayrıca diğer dillerden ayıra en oumlnemli oumlzelliklerden biri de ccedilalıĢma
esnasında uygulamaya muumldahale edebilme iznini vermesidir Bu oumlzellik
sadece oumlnceden derlenmiĢ ve ağır plug-inler aracılığı ile geniĢletilen
uygulamalara kıyasla ccedilok daha buumlyuumlk bir avantaj
FONKSİYONLAR
Bu dilde fonksiyonlar birinci-sınıf varlıklardır(entities)
ndashĠfadelerin(expressions) değerleri ve listelerin elemanları olabilirler
ndashDeğiĢkenlere(variables) atanabilirler ve parametrelere geccedililebilirler
Scheme dilindeki formlar ikiye ayrılır
Temel Formlar define lambda if quote unquote unquote-splicing
quasiquote define-syntax let-syntax letrec-syntax syntax-rules set
( 5 4) sonuccedil olarak karĢımıza ccedilikacaktir
Ifadesi de yorum satırı haline getirir kodu
Ġf deyimini oumlrnekle accedilıklayalım
(If lsaquo expr rsaquo lsaquoexpr rsaquo lsaquoexpr rsaquo)
(If (= (+ 4 5) 9) t f)
Burada ilk verdiğimiz arguumlman (= (+ 4 5) 9) iĢleminin doğru olup
olmadığına bakar Eğer iĢlem doğruysa ccedilıktı olarak t yanlıĢsa f doumlner
Anlayacağınız uumlzere bu oumlzel durum proseduumlruuml koĢul gerektiren bir proseduumlr
bu durumda ilk verdiğimiz arguumlman da koĢulu belirleyen parccedila oluyor Oumlnce
o koĢulu inceleyen yorumlayıcı da daha sonra verdiğimiz diğer arguumlmanları
koĢula goumlre seccedilerek bize gereken ccedilıktıyı veriyor
Cond deyimi( cond[ltİfadegt ltİfadegt] )
Bir soruya dayalı alternatif cevapları seccedilmek istiyorsanız cond ifadesi kullanılır
ġart ifadesidir
Cond Ģeklinde koumlĢeli parantez maddeler dizisi iccedilerir
(Cond
((ltSıcaklık 50) Soğuk)
((gt Sıcaklık 90) Ccedilok sıcak )
(else Sorun yok))
Ayrıca else Scheme dilinde cond ifadesiyle kullanılır diğer dillerde olduğu gibi if
le değil Else ifadesi ise diğer koĢullar olmadığında else koĢulu olacaktır
Do ifadesi
(do ((i 0 (+ i 1))) ((gt i 2)) (display i) (newline))
Programın ccedilıktısı
0
1
2 dir Ġlk oumlnce i ye 0 atıyor ve i yi 1 er 1 er artırarak i 2 den buumlyuumlk olana
kadar doumlnduumlruumlyor display ile de ekrana yazdırıyornewline satırı ilede bir alt
satıra geccediliyor
While ifadesi
(While (koĢul ))
(Deyim1)
(Deyim2)
)
Let ifadesi
(let ((x 5)) ( x 2))
Ekran ccedilıktısı ise 10 olurLet yanındaki ilk koĢul ifadesinde değer ataması
yapılır ve diğer ifadede de matematiksel iĢlemi gerccedilekleĢtirir
Listeler
List fonksiyonu herhangi bir sayı alır ve değerlerini iccedileren bir liste doumlnduumlruumlr
gt(listKırmızı YeĢil Mavi)
(Kırmızı yeĢilmavi)
gt(list 1 2 3 4 5)
(1 2 3 4 5)
LIST
ndash Herhangi bir sayıda parametre alır elemanları bu parametreler olan bir liste
doumlnduumlruumlr
Ayrıca Bizim listelerde bulmak iccedilin uğraĢtığımız problemler iccedilin direk
fonksiyonlar var Mesela
first listenin ilk elemanını alır
Rest listenin ilk elemanı haricindekileri alır
gt (first (list 1 2 3 ))
1
gt(rest (list 1 2 3 ))
2 3
Listeler iccedilin bir oumlrnek daha
gt( list ( list 1 2 3 ) 5 (list a b c) )
((1 2 3) 5 (a b c))
Hello World Uygulaması
Programlamaya ilk baslayan herkesin yaptığı gibi bizde scheme dilinde
ekrana ―hello world yazdiralimScheme dilinde farkli seviyelerde farklı kodlar
kullanilirPretty Big de hemen hemen buumltuumln kodlar ccedilalıĢtığı iccedilin biz genelde bu
level ı kullaniyoruz
Display ―Hello World
(write Hello World )
―Hello World
Yukarı da goumlruumllen kodlar ccedilalıĢtırıldığında aynı ekran ccedilıktısına sahip
olurlarGoumlruumllduumlğuuml gibi ne noktalı virguumll nede fazla kelimeye gerek kalmıyor
Matematik Fonksiyonları
(Exp x) e^x in sonucunu doumlnduumlruumlr
(Log x) x sayısının logaritma değerini doumlnduumlruumlr
(sqrt x) x koumlkuumlnuumln karesini doumlnduumlruumlr
(max x1 x2) verilen listeden en buumlyuumlk sayıyı doumlnduumlruumlr
(min x1 x2) verilen listeden en kuku sayıyı doumlnduumlruumlr
(quotient x1 x2) x1x2 kesrinin boumlluumlmuumlnuuml doumlnduumlruumlr
(remian x1 x2) x1x2 kesrinin kalanini doumlnduumlruumlr
(modula x1 x2) x1 in x2 ye moduumlluuml sonucunu doumlnduumlruumlr
(gcm num1 num2 ) Verilen listenin en buumlyuumlk ortak boumlleni doumlnduumlruumlr
(lcm num1 num2 ) Verilen listenin en kuku ortak ccedilarpanı doumlnduumlruumlr
(Ceiling x) x ten kuku olmayan en kuku değeri doumlnduumlruumlr
( turn cate x) Mutlak değeri x in mutlak değerinden buumlyuumlk olmayan Xlsquo en
yakın değeri doumlnduumlruumlr
(round x) xe en yakın değere yuvarlıyor
İlişkisel Operatoumlrler
(=x 1) x 1 ise true doumlnduumlruumlr
(ltx y) x yden kuumlccediluumlkse true doumlnduumlruumlr
(gtx y) x y den buumlyuumlkse true doumlnduumlruumlr
(lt=x y) x yden kuku veya eĢitse true doumlnduumlruumlr
(gt=x y) x yden buumlyuumlk veya eĢitse true doumlnduumlruumlr
(eq x y) x ve y aynı ise true doumlnduumlruumlr
(equal x y) x ve y aynı yapıda olup aynı iccedileriğe sahipse true doumlnduumlruumlr
Tip Yuumlklemeleri
(procedure x)X fonksiyon ise true doumlnduumlruumlr
(null x) X boĢ bir liste ise true doumlnduumlruumlr
(zero x )X sıfır ise true doumlnduumlruumlr
(odd x) X tek ise true doumlnduumlruumlr
(even x) X tek ise true doumlnduumlruumlr
(symbolx) X tek ise true doumlnduumlruumlr
Asal Sayı Bulma Programı
(Define (divides m n)
(Cond
[(zero m) true]
[(amplt m n) false]
[else (divides (- m n) n)]
))
(Define (check-prime prime-cand divisor)
(cond
[(= 1 divisor) true]
[(divides prime-cand divisor) false]
[else (check-prime prime-cand (sub1 divisor))]))
(define (prime x)
(cond
[(= x 0) false]
[(= x 1) false]
[else (check-prime x (- x 1))]
))
KAYNAKLAR
wwwbilgisayarkavramlaricom
httpe-bergicom2010OcakScheme
httpwwwhtdporg2003ndash09ndash26Bookcurriculum-Z-H-1html
httptranslategooglecomtrtranslatehl=tramplangpair=en7Ctrampu=http httpprogramming-musingsorg20091223scheme-lectures-mostly httptranslategooglecomtrtranslatehl=trampsl=enampu=http3A2F2Fw
httpblogyollucomtagscheme
httpwwwschemecomtspl4 httpracket-langorgdownload
PROJE KONUSU SCHEME DİLİNİN OZELİKLERİNİ TAŞIYAN VE BU PDF DE
ANLATILAN KONULAR İLGİLİ 10 SORU HAZIRLANIP BUNLARIN CEVAPLARINI
KULANICIDAN İSTENİLMESİ
PROJEDE KULANILANLAR
LİSTE
FONKSİYON
KOŞUL CUumlMLESİ
DEĞER ATAMALARI
PROJE KODU
(define k 0)
(define doğrular 0)
(define yanlışlar 0)
sorular
(define a 1soru Lamda nedir)
(define A1 1 isimsiz fonksiyonları belirler)
(define B1 2 değer ataması yapar)
(define C1 3 pointer goumlrevi yapar)
(define b 2soru hangisi aritmetik fonksiyon değildir)
(define A2 1 SQRT )
(define B2 2 MIN )
(define C2 3 QUOTE )
(define c 3soru=list kulanımı nasıldır)
(define A3 (1 LIST (A) (B) (C) (D)))
(define B3 (2 LIST A B C D) )
(define C3 (3 LIST A B C D) )
(define d 4soru=equalsimp ne demek)
(define A4 1 iki basit liste alır ve eşitliğini kontrol eder)
(define B4 2 listeleri birbirine atar)
(define C4 3 listeleri eşitler)
(define e1 5soru=append ne işe yarar)
(define A5 1 İki listeyi peş peşe ekler)
(define B5 2 iki listeyi ccedilıkarır)
(define C5 3 iki listeyi ccedilarpar)
(define f 6soru set isimlere değer atar doğrumudur)
(define A6 1 doğru)
(define B6 2 yanlis)
doğru cevap listesi
(define DListe (list 1 1 1 2 3 1) )
şıkları yazdırma
(define (Cevaplar cevapListesi)
( cond [(null cevapListesi) 0]
[else (Cevaplar (rest cevapListesi))
(display (first cevapListesi))
(display n)
]))
doğru yanlış kontroluuml
(define kon
(lambda (k FDL)
(cond ((= k FDL) (display Tebrikler )nn)(set dogrular (+ 1 dogrular)))
else ( display Maalesef olmadı (nn)(set yanlislar (+ 1 yanlislar))])))
soru ve şıkları yazdırıp cevap kontroluumlnuuml ccedilağırma
(define (Sorular soruListesi cevpListesi DListesi )
( cond [(null soruListesi) 0]
[else
(Sorular (rest soruListesi) (rest cevpListesi) (rest DListesi ))
(display (first soruListesi))
(display n)
(Cevaplar (first cevpListesi)) (set k (read)) (kon k (first DListesi)) ]))
şık listesi
(define CListe (list(list B6 A6) (list C5 B5 A5) (list C4 B4 A4) (list C3 B3 A3) (list C2 B2
A2)(list C1 B1 A1)))
Sorular fonksiyonunu ccedilağırma
(Sorular (list f e1 d c b a) CListe DListe )
yapılan doğru ve yanlış sayısını goumlsterme
(display Doğru cevap sayısı )
dogrular
(display Yanlış cevap sayısı )
yanlislar
EMEĞİ GECcedilEN BUumlTUumlN HERKESE TEŞEKUumlRLERİMİZİ SUNUYORUZhellip
INSERT MENUumlSUuml
mdashINSERT COMMENT BOX kutu iccedilinde yorum satırı eklemeyi sağlar
mdashINSERT IMAGE resim eklenir
mdashINSERT FRACTION kesirli sayı oluĢturmak iccedilin kullanılır
mdashCHECK SYNTAX yazım hatalarını kontrol eder
mdashMACRO STEPPER kodu satır ccedilalıĢtırarak ilerler C taki F11 tuĢu gibi
ccedilalıĢır
Editoumlr uumlzerinde ise
Sağ alttaki ccedilarpı alt ekranı kapatmamızı sağlar
Sağ alt koumlĢedeki sayılar imlecin bulunduğu satır ve suumltunu goumlsterir
Sol altta seccediltiğimiz dil yazılıdır Uumlzerine tıkladığımızda daha oumlnceden
kullandığımız dillerin listesi goumlruumlnuumlr
DOSYA İŞLEMLERİ
Open-input-file Okunacak dosyayı accedilar
Open-output-file Yazılacak dosyayı accedilarDosya oumlnceden oluĢturulmamıĢsa oluĢturur
Close-input-port Input dosyasını kapatır
Close-output-port Output dosyasını kapatır
Read-char Dosyadan bir karakter okuduktan sonra imleci diğer karaktere taĢır Peek-char read-charlsquodan farkı imleci taĢımaz
Read-string Belirtilen sayı kadar karakter okur
Read-line Satır okur
Write Dosyaya string ifadeyi tırnak iĢaretleriyle birlikte yazar
Display Dosyaya string ifadeyi tırnak iĢaretleri olmadan yazar
Write-string Dosyaya string ifadeyi tırnak iĢaretleri olmadan yazar ayrıca karakter saysını
alt ekranda goumlsterir
With-input-from-file with-output-to-file Dosya accedilma kapatma iĢlemini otomatik yapıp
verilen proseduumlruuml uygular
Oumlrnek kodlar
Dosyadan okuma
Dosyada Scheme is fun
Write with Schemelsquo yazılıdır
(define p (open-input-file testtxt)) (read p)
(read-line p)
(read-string 300 p)
(close-input-port p) Ccedilıktısı Scheme is funr
Write with Scheme
----------------------
(with-input-from-file testtxt
(lambda ()
(read) ))
Ccedilıktısı Scheme
Dosyaya yazma
(define y merhaba)
(define p (open-output-file testtxt))
(write y p)
(display y p)
(write ifade p )
(write-char k p)
(close-output-port p)
-------------------------
(with-output-to-file test2txt
(lambda ()
(display Hello world) ))
---------------------------
KULLANICI ETKİLEŞİMİ
Bu dilde fonksiyonlar değiĢkenlere değer olarak atanan veya fonksiyonlara
delil olarak geccedilirilebilir Schemelsquode Scheme kodunu oluĢturan ve
yorumlanmasını(interpretation) isteyen bir fonksiyon tanımlamak muumlmkuumlnduumlr
Bu muumlmkuumlnduumlr ccediluumlnkuuml yorumlayıcı(interpreter) kullanıcı tarafından
eriĢilebilen(user-available) bir fonksiyondur Fonksiyonel dillerin tasarımı
Matematiksel Fonksiyonlara dayalıdır
Kullanıcıya da yakın olan sağlam bir teorik temel fakat nispeten programların
koĢacağı makinelerin mimarileriyle ilgisizdir
Schemelsquoi ayrıca diğer dillerden ayıra en oumlnemli oumlzelliklerden biri de ccedilalıĢma
esnasında uygulamaya muumldahale edebilme iznini vermesidir Bu oumlzellik
sadece oumlnceden derlenmiĢ ve ağır plug-inler aracılığı ile geniĢletilen
uygulamalara kıyasla ccedilok daha buumlyuumlk bir avantaj
FONKSİYONLAR
Bu dilde fonksiyonlar birinci-sınıf varlıklardır(entities)
ndashĠfadelerin(expressions) değerleri ve listelerin elemanları olabilirler
ndashDeğiĢkenlere(variables) atanabilirler ve parametrelere geccedililebilirler
Scheme dilindeki formlar ikiye ayrılır
Temel Formlar define lambda if quote unquote unquote-splicing
quasiquote define-syntax let-syntax letrec-syntax syntax-rules set
( 5 4) sonuccedil olarak karĢımıza ccedilikacaktir
Ifadesi de yorum satırı haline getirir kodu
Ġf deyimini oumlrnekle accedilıklayalım
(If lsaquo expr rsaquo lsaquoexpr rsaquo lsaquoexpr rsaquo)
(If (= (+ 4 5) 9) t f)
Burada ilk verdiğimiz arguumlman (= (+ 4 5) 9) iĢleminin doğru olup
olmadığına bakar Eğer iĢlem doğruysa ccedilıktı olarak t yanlıĢsa f doumlner
Anlayacağınız uumlzere bu oumlzel durum proseduumlruuml koĢul gerektiren bir proseduumlr
bu durumda ilk verdiğimiz arguumlman da koĢulu belirleyen parccedila oluyor Oumlnce
o koĢulu inceleyen yorumlayıcı da daha sonra verdiğimiz diğer arguumlmanları
koĢula goumlre seccedilerek bize gereken ccedilıktıyı veriyor
Cond deyimi( cond[ltİfadegt ltİfadegt] )
Bir soruya dayalı alternatif cevapları seccedilmek istiyorsanız cond ifadesi kullanılır
ġart ifadesidir
Cond Ģeklinde koumlĢeli parantez maddeler dizisi iccedilerir
(Cond
((ltSıcaklık 50) Soğuk)
((gt Sıcaklık 90) Ccedilok sıcak )
(else Sorun yok))
Ayrıca else Scheme dilinde cond ifadesiyle kullanılır diğer dillerde olduğu gibi if
le değil Else ifadesi ise diğer koĢullar olmadığında else koĢulu olacaktır
Do ifadesi
(do ((i 0 (+ i 1))) ((gt i 2)) (display i) (newline))
Programın ccedilıktısı
0
1
2 dir Ġlk oumlnce i ye 0 atıyor ve i yi 1 er 1 er artırarak i 2 den buumlyuumlk olana
kadar doumlnduumlruumlyor display ile de ekrana yazdırıyornewline satırı ilede bir alt
satıra geccediliyor
While ifadesi
(While (koĢul ))
(Deyim1)
(Deyim2)
)
Let ifadesi
(let ((x 5)) ( x 2))
Ekran ccedilıktısı ise 10 olurLet yanındaki ilk koĢul ifadesinde değer ataması
yapılır ve diğer ifadede de matematiksel iĢlemi gerccedilekleĢtirir
Listeler
List fonksiyonu herhangi bir sayı alır ve değerlerini iccedileren bir liste doumlnduumlruumlr
gt(listKırmızı YeĢil Mavi)
(Kırmızı yeĢilmavi)
gt(list 1 2 3 4 5)
(1 2 3 4 5)
LIST
ndash Herhangi bir sayıda parametre alır elemanları bu parametreler olan bir liste
doumlnduumlruumlr
Ayrıca Bizim listelerde bulmak iccedilin uğraĢtığımız problemler iccedilin direk
fonksiyonlar var Mesela
first listenin ilk elemanını alır
Rest listenin ilk elemanı haricindekileri alır
gt (first (list 1 2 3 ))
1
gt(rest (list 1 2 3 ))
2 3
Listeler iccedilin bir oumlrnek daha
gt( list ( list 1 2 3 ) 5 (list a b c) )
((1 2 3) 5 (a b c))
Hello World Uygulaması
Programlamaya ilk baslayan herkesin yaptığı gibi bizde scheme dilinde
ekrana ―hello world yazdiralimScheme dilinde farkli seviyelerde farklı kodlar
kullanilirPretty Big de hemen hemen buumltuumln kodlar ccedilalıĢtığı iccedilin biz genelde bu
level ı kullaniyoruz
Display ―Hello World
(write Hello World )
―Hello World
Yukarı da goumlruumllen kodlar ccedilalıĢtırıldığında aynı ekran ccedilıktısına sahip
olurlarGoumlruumllduumlğuuml gibi ne noktalı virguumll nede fazla kelimeye gerek kalmıyor
Matematik Fonksiyonları
(Exp x) e^x in sonucunu doumlnduumlruumlr
(Log x) x sayısının logaritma değerini doumlnduumlruumlr
(sqrt x) x koumlkuumlnuumln karesini doumlnduumlruumlr
(max x1 x2) verilen listeden en buumlyuumlk sayıyı doumlnduumlruumlr
(min x1 x2) verilen listeden en kuku sayıyı doumlnduumlruumlr
(quotient x1 x2) x1x2 kesrinin boumlluumlmuumlnuuml doumlnduumlruumlr
(remian x1 x2) x1x2 kesrinin kalanini doumlnduumlruumlr
(modula x1 x2) x1 in x2 ye moduumlluuml sonucunu doumlnduumlruumlr
(gcm num1 num2 ) Verilen listenin en buumlyuumlk ortak boumlleni doumlnduumlruumlr
(lcm num1 num2 ) Verilen listenin en kuku ortak ccedilarpanı doumlnduumlruumlr
(Ceiling x) x ten kuku olmayan en kuku değeri doumlnduumlruumlr
( turn cate x) Mutlak değeri x in mutlak değerinden buumlyuumlk olmayan Xlsquo en
yakın değeri doumlnduumlruumlr
(round x) xe en yakın değere yuvarlıyor
İlişkisel Operatoumlrler
(=x 1) x 1 ise true doumlnduumlruumlr
(ltx y) x yden kuumlccediluumlkse true doumlnduumlruumlr
(gtx y) x y den buumlyuumlkse true doumlnduumlruumlr
(lt=x y) x yden kuku veya eĢitse true doumlnduumlruumlr
(gt=x y) x yden buumlyuumlk veya eĢitse true doumlnduumlruumlr
(eq x y) x ve y aynı ise true doumlnduumlruumlr
(equal x y) x ve y aynı yapıda olup aynı iccedileriğe sahipse true doumlnduumlruumlr
Tip Yuumlklemeleri
(procedure x)X fonksiyon ise true doumlnduumlruumlr
(null x) X boĢ bir liste ise true doumlnduumlruumlr
(zero x )X sıfır ise true doumlnduumlruumlr
(odd x) X tek ise true doumlnduumlruumlr
(even x) X tek ise true doumlnduumlruumlr
(symbolx) X tek ise true doumlnduumlruumlr
Asal Sayı Bulma Programı
(Define (divides m n)
(Cond
[(zero m) true]
[(amplt m n) false]
[else (divides (- m n) n)]
))
(Define (check-prime prime-cand divisor)
(cond
[(= 1 divisor) true]
[(divides prime-cand divisor) false]
[else (check-prime prime-cand (sub1 divisor))]))
(define (prime x)
(cond
[(= x 0) false]
[(= x 1) false]
[else (check-prime x (- x 1))]
))
KAYNAKLAR
wwwbilgisayarkavramlaricom
httpe-bergicom2010OcakScheme
httpwwwhtdporg2003ndash09ndash26Bookcurriculum-Z-H-1html
httptranslategooglecomtrtranslatehl=tramplangpair=en7Ctrampu=http httpprogramming-musingsorg20091223scheme-lectures-mostly httptranslategooglecomtrtranslatehl=trampsl=enampu=http3A2F2Fw
httpblogyollucomtagscheme
httpwwwschemecomtspl4 httpracket-langorgdownload
PROJE KONUSU SCHEME DİLİNİN OZELİKLERİNİ TAŞIYAN VE BU PDF DE
ANLATILAN KONULAR İLGİLİ 10 SORU HAZIRLANIP BUNLARIN CEVAPLARINI
KULANICIDAN İSTENİLMESİ
PROJEDE KULANILANLAR
LİSTE
FONKSİYON
KOŞUL CUumlMLESİ
DEĞER ATAMALARI
PROJE KODU
(define k 0)
(define doğrular 0)
(define yanlışlar 0)
sorular
(define a 1soru Lamda nedir)
(define A1 1 isimsiz fonksiyonları belirler)
(define B1 2 değer ataması yapar)
(define C1 3 pointer goumlrevi yapar)
(define b 2soru hangisi aritmetik fonksiyon değildir)
(define A2 1 SQRT )
(define B2 2 MIN )
(define C2 3 QUOTE )
(define c 3soru=list kulanımı nasıldır)
(define A3 (1 LIST (A) (B) (C) (D)))
(define B3 (2 LIST A B C D) )
(define C3 (3 LIST A B C D) )
(define d 4soru=equalsimp ne demek)
(define A4 1 iki basit liste alır ve eşitliğini kontrol eder)
(define B4 2 listeleri birbirine atar)
(define C4 3 listeleri eşitler)
(define e1 5soru=append ne işe yarar)
(define A5 1 İki listeyi peş peşe ekler)
(define B5 2 iki listeyi ccedilıkarır)
(define C5 3 iki listeyi ccedilarpar)
(define f 6soru set isimlere değer atar doğrumudur)
(define A6 1 doğru)
(define B6 2 yanlis)
doğru cevap listesi
(define DListe (list 1 1 1 2 3 1) )
şıkları yazdırma
(define (Cevaplar cevapListesi)
( cond [(null cevapListesi) 0]
[else (Cevaplar (rest cevapListesi))
(display (first cevapListesi))
(display n)
]))
doğru yanlış kontroluuml
(define kon
(lambda (k FDL)
(cond ((= k FDL) (display Tebrikler )nn)(set dogrular (+ 1 dogrular)))
else ( display Maalesef olmadı (nn)(set yanlislar (+ 1 yanlislar))])))
soru ve şıkları yazdırıp cevap kontroluumlnuuml ccedilağırma
(define (Sorular soruListesi cevpListesi DListesi )
( cond [(null soruListesi) 0]
[else
(Sorular (rest soruListesi) (rest cevpListesi) (rest DListesi ))
(display (first soruListesi))
(display n)
(Cevaplar (first cevpListesi)) (set k (read)) (kon k (first DListesi)) ]))
şık listesi
(define CListe (list(list B6 A6) (list C5 B5 A5) (list C4 B4 A4) (list C3 B3 A3) (list C2 B2
A2)(list C1 B1 A1)))
Sorular fonksiyonunu ccedilağırma
(Sorular (list f e1 d c b a) CListe DListe )
yapılan doğru ve yanlış sayısını goumlsterme
(display Doğru cevap sayısı )
dogrular
(display Yanlış cevap sayısı )
yanlislar
EMEĞİ GECcedilEN BUumlTUumlN HERKESE TEŞEKUumlRLERİMİZİ SUNUYORUZhellip
DOSYA İŞLEMLERİ
Open-input-file Okunacak dosyayı accedilar
Open-output-file Yazılacak dosyayı accedilarDosya oumlnceden oluĢturulmamıĢsa oluĢturur
Close-input-port Input dosyasını kapatır
Close-output-port Output dosyasını kapatır
Read-char Dosyadan bir karakter okuduktan sonra imleci diğer karaktere taĢır Peek-char read-charlsquodan farkı imleci taĢımaz
Read-string Belirtilen sayı kadar karakter okur
Read-line Satır okur
Write Dosyaya string ifadeyi tırnak iĢaretleriyle birlikte yazar
Display Dosyaya string ifadeyi tırnak iĢaretleri olmadan yazar
Write-string Dosyaya string ifadeyi tırnak iĢaretleri olmadan yazar ayrıca karakter saysını
alt ekranda goumlsterir
With-input-from-file with-output-to-file Dosya accedilma kapatma iĢlemini otomatik yapıp
verilen proseduumlruuml uygular
Oumlrnek kodlar
Dosyadan okuma
Dosyada Scheme is fun
Write with Schemelsquo yazılıdır
(define p (open-input-file testtxt)) (read p)
(read-line p)
(read-string 300 p)
(close-input-port p) Ccedilıktısı Scheme is funr
Write with Scheme
----------------------
(with-input-from-file testtxt
(lambda ()
(read) ))
Ccedilıktısı Scheme
Dosyaya yazma
(define y merhaba)
(define p (open-output-file testtxt))
(write y p)
(display y p)
(write ifade p )
(write-char k p)
(close-output-port p)
-------------------------
(with-output-to-file test2txt
(lambda ()
(display Hello world) ))
---------------------------
KULLANICI ETKİLEŞİMİ
Bu dilde fonksiyonlar değiĢkenlere değer olarak atanan veya fonksiyonlara
delil olarak geccedilirilebilir Schemelsquode Scheme kodunu oluĢturan ve
yorumlanmasını(interpretation) isteyen bir fonksiyon tanımlamak muumlmkuumlnduumlr
Bu muumlmkuumlnduumlr ccediluumlnkuuml yorumlayıcı(interpreter) kullanıcı tarafından
eriĢilebilen(user-available) bir fonksiyondur Fonksiyonel dillerin tasarımı
Matematiksel Fonksiyonlara dayalıdır
Kullanıcıya da yakın olan sağlam bir teorik temel fakat nispeten programların
koĢacağı makinelerin mimarileriyle ilgisizdir
Schemelsquoi ayrıca diğer dillerden ayıra en oumlnemli oumlzelliklerden biri de ccedilalıĢma
esnasında uygulamaya muumldahale edebilme iznini vermesidir Bu oumlzellik
sadece oumlnceden derlenmiĢ ve ağır plug-inler aracılığı ile geniĢletilen
uygulamalara kıyasla ccedilok daha buumlyuumlk bir avantaj
FONKSİYONLAR
Bu dilde fonksiyonlar birinci-sınıf varlıklardır(entities)
ndashĠfadelerin(expressions) değerleri ve listelerin elemanları olabilirler
ndashDeğiĢkenlere(variables) atanabilirler ve parametrelere geccedililebilirler
Scheme dilindeki formlar ikiye ayrılır
Temel Formlar define lambda if quote unquote unquote-splicing
quasiquote define-syntax let-syntax letrec-syntax syntax-rules set
( 5 4) sonuccedil olarak karĢımıza ccedilikacaktir
Ifadesi de yorum satırı haline getirir kodu
Ġf deyimini oumlrnekle accedilıklayalım
(If lsaquo expr rsaquo lsaquoexpr rsaquo lsaquoexpr rsaquo)
(If (= (+ 4 5) 9) t f)
Burada ilk verdiğimiz arguumlman (= (+ 4 5) 9) iĢleminin doğru olup
olmadığına bakar Eğer iĢlem doğruysa ccedilıktı olarak t yanlıĢsa f doumlner
Anlayacağınız uumlzere bu oumlzel durum proseduumlruuml koĢul gerektiren bir proseduumlr
bu durumda ilk verdiğimiz arguumlman da koĢulu belirleyen parccedila oluyor Oumlnce
o koĢulu inceleyen yorumlayıcı da daha sonra verdiğimiz diğer arguumlmanları
koĢula goumlre seccedilerek bize gereken ccedilıktıyı veriyor
Cond deyimi( cond[ltİfadegt ltİfadegt] )
Bir soruya dayalı alternatif cevapları seccedilmek istiyorsanız cond ifadesi kullanılır
ġart ifadesidir
Cond Ģeklinde koumlĢeli parantez maddeler dizisi iccedilerir
(Cond
((ltSıcaklık 50) Soğuk)
((gt Sıcaklık 90) Ccedilok sıcak )
(else Sorun yok))
Ayrıca else Scheme dilinde cond ifadesiyle kullanılır diğer dillerde olduğu gibi if
le değil Else ifadesi ise diğer koĢullar olmadığında else koĢulu olacaktır
Do ifadesi
(do ((i 0 (+ i 1))) ((gt i 2)) (display i) (newline))
Programın ccedilıktısı
0
1
2 dir Ġlk oumlnce i ye 0 atıyor ve i yi 1 er 1 er artırarak i 2 den buumlyuumlk olana
kadar doumlnduumlruumlyor display ile de ekrana yazdırıyornewline satırı ilede bir alt
satıra geccediliyor
While ifadesi
(While (koĢul ))
(Deyim1)
(Deyim2)
)
Let ifadesi
(let ((x 5)) ( x 2))
Ekran ccedilıktısı ise 10 olurLet yanındaki ilk koĢul ifadesinde değer ataması
yapılır ve diğer ifadede de matematiksel iĢlemi gerccedilekleĢtirir
Listeler
List fonksiyonu herhangi bir sayı alır ve değerlerini iccedileren bir liste doumlnduumlruumlr
gt(listKırmızı YeĢil Mavi)
(Kırmızı yeĢilmavi)
gt(list 1 2 3 4 5)
(1 2 3 4 5)
LIST
ndash Herhangi bir sayıda parametre alır elemanları bu parametreler olan bir liste
doumlnduumlruumlr
Ayrıca Bizim listelerde bulmak iccedilin uğraĢtığımız problemler iccedilin direk
fonksiyonlar var Mesela
first listenin ilk elemanını alır
Rest listenin ilk elemanı haricindekileri alır
gt (first (list 1 2 3 ))
1
gt(rest (list 1 2 3 ))
2 3
Listeler iccedilin bir oumlrnek daha
gt( list ( list 1 2 3 ) 5 (list a b c) )
((1 2 3) 5 (a b c))
Hello World Uygulaması
Programlamaya ilk baslayan herkesin yaptığı gibi bizde scheme dilinde
ekrana ―hello world yazdiralimScheme dilinde farkli seviyelerde farklı kodlar
kullanilirPretty Big de hemen hemen buumltuumln kodlar ccedilalıĢtığı iccedilin biz genelde bu
level ı kullaniyoruz
Display ―Hello World
(write Hello World )
―Hello World
Yukarı da goumlruumllen kodlar ccedilalıĢtırıldığında aynı ekran ccedilıktısına sahip
olurlarGoumlruumllduumlğuuml gibi ne noktalı virguumll nede fazla kelimeye gerek kalmıyor
Matematik Fonksiyonları
(Exp x) e^x in sonucunu doumlnduumlruumlr
(Log x) x sayısının logaritma değerini doumlnduumlruumlr
(sqrt x) x koumlkuumlnuumln karesini doumlnduumlruumlr
(max x1 x2) verilen listeden en buumlyuumlk sayıyı doumlnduumlruumlr
(min x1 x2) verilen listeden en kuku sayıyı doumlnduumlruumlr
(quotient x1 x2) x1x2 kesrinin boumlluumlmuumlnuuml doumlnduumlruumlr
(remian x1 x2) x1x2 kesrinin kalanini doumlnduumlruumlr
(modula x1 x2) x1 in x2 ye moduumlluuml sonucunu doumlnduumlruumlr
(gcm num1 num2 ) Verilen listenin en buumlyuumlk ortak boumlleni doumlnduumlruumlr
(lcm num1 num2 ) Verilen listenin en kuku ortak ccedilarpanı doumlnduumlruumlr
(Ceiling x) x ten kuku olmayan en kuku değeri doumlnduumlruumlr
( turn cate x) Mutlak değeri x in mutlak değerinden buumlyuumlk olmayan Xlsquo en
yakın değeri doumlnduumlruumlr
(round x) xe en yakın değere yuvarlıyor
İlişkisel Operatoumlrler
(=x 1) x 1 ise true doumlnduumlruumlr
(ltx y) x yden kuumlccediluumlkse true doumlnduumlruumlr
(gtx y) x y den buumlyuumlkse true doumlnduumlruumlr
(lt=x y) x yden kuku veya eĢitse true doumlnduumlruumlr
(gt=x y) x yden buumlyuumlk veya eĢitse true doumlnduumlruumlr
(eq x y) x ve y aynı ise true doumlnduumlruumlr
(equal x y) x ve y aynı yapıda olup aynı iccedileriğe sahipse true doumlnduumlruumlr
Tip Yuumlklemeleri
(procedure x)X fonksiyon ise true doumlnduumlruumlr
(null x) X boĢ bir liste ise true doumlnduumlruumlr
(zero x )X sıfır ise true doumlnduumlruumlr
(odd x) X tek ise true doumlnduumlruumlr
(even x) X tek ise true doumlnduumlruumlr
(symbolx) X tek ise true doumlnduumlruumlr
Asal Sayı Bulma Programı
(Define (divides m n)
(Cond
[(zero m) true]
[(amplt m n) false]
[else (divides (- m n) n)]
))
(Define (check-prime prime-cand divisor)
(cond
[(= 1 divisor) true]
[(divides prime-cand divisor) false]
[else (check-prime prime-cand (sub1 divisor))]))
(define (prime x)
(cond
[(= x 0) false]
[(= x 1) false]
[else (check-prime x (- x 1))]
))
KAYNAKLAR
wwwbilgisayarkavramlaricom
httpe-bergicom2010OcakScheme
httpwwwhtdporg2003ndash09ndash26Bookcurriculum-Z-H-1html
httptranslategooglecomtrtranslatehl=tramplangpair=en7Ctrampu=http httpprogramming-musingsorg20091223scheme-lectures-mostly httptranslategooglecomtrtranslatehl=trampsl=enampu=http3A2F2Fw
httpblogyollucomtagscheme
httpwwwschemecomtspl4 httpracket-langorgdownload
PROJE KONUSU SCHEME DİLİNİN OZELİKLERİNİ TAŞIYAN VE BU PDF DE
ANLATILAN KONULAR İLGİLİ 10 SORU HAZIRLANIP BUNLARIN CEVAPLARINI
KULANICIDAN İSTENİLMESİ
PROJEDE KULANILANLAR
LİSTE
FONKSİYON
KOŞUL CUumlMLESİ
DEĞER ATAMALARI
PROJE KODU
(define k 0)
(define doğrular 0)
(define yanlışlar 0)
sorular
(define a 1soru Lamda nedir)
(define A1 1 isimsiz fonksiyonları belirler)
(define B1 2 değer ataması yapar)
(define C1 3 pointer goumlrevi yapar)
(define b 2soru hangisi aritmetik fonksiyon değildir)
(define A2 1 SQRT )
(define B2 2 MIN )
(define C2 3 QUOTE )
(define c 3soru=list kulanımı nasıldır)
(define A3 (1 LIST (A) (B) (C) (D)))
(define B3 (2 LIST A B C D) )
(define C3 (3 LIST A B C D) )
(define d 4soru=equalsimp ne demek)
(define A4 1 iki basit liste alır ve eşitliğini kontrol eder)
(define B4 2 listeleri birbirine atar)
(define C4 3 listeleri eşitler)
(define e1 5soru=append ne işe yarar)
(define A5 1 İki listeyi peş peşe ekler)
(define B5 2 iki listeyi ccedilıkarır)
(define C5 3 iki listeyi ccedilarpar)
(define f 6soru set isimlere değer atar doğrumudur)
(define A6 1 doğru)
(define B6 2 yanlis)
doğru cevap listesi
(define DListe (list 1 1 1 2 3 1) )
şıkları yazdırma
(define (Cevaplar cevapListesi)
( cond [(null cevapListesi) 0]
[else (Cevaplar (rest cevapListesi))
(display (first cevapListesi))
(display n)
]))
doğru yanlış kontroluuml
(define kon
(lambda (k FDL)
(cond ((= k FDL) (display Tebrikler )nn)(set dogrular (+ 1 dogrular)))
else ( display Maalesef olmadı (nn)(set yanlislar (+ 1 yanlislar))])))
soru ve şıkları yazdırıp cevap kontroluumlnuuml ccedilağırma
(define (Sorular soruListesi cevpListesi DListesi )
( cond [(null soruListesi) 0]
[else
(Sorular (rest soruListesi) (rest cevpListesi) (rest DListesi ))
(display (first soruListesi))
(display n)
(Cevaplar (first cevpListesi)) (set k (read)) (kon k (first DListesi)) ]))
şık listesi
(define CListe (list(list B6 A6) (list C5 B5 A5) (list C4 B4 A4) (list C3 B3 A3) (list C2 B2
A2)(list C1 B1 A1)))
Sorular fonksiyonunu ccedilağırma
(Sorular (list f e1 d c b a) CListe DListe )
yapılan doğru ve yanlış sayısını goumlsterme
(display Doğru cevap sayısı )
dogrular
(display Yanlış cevap sayısı )
yanlislar
EMEĞİ GECcedilEN BUumlTUumlN HERKESE TEŞEKUumlRLERİMİZİ SUNUYORUZhellip
Write with Scheme
----------------------
(with-input-from-file testtxt
(lambda ()
(read) ))
Ccedilıktısı Scheme
Dosyaya yazma
(define y merhaba)
(define p (open-output-file testtxt))
(write y p)
(display y p)
(write ifade p )
(write-char k p)
(close-output-port p)
-------------------------
(with-output-to-file test2txt
(lambda ()
(display Hello world) ))
---------------------------
KULLANICI ETKİLEŞİMİ
Bu dilde fonksiyonlar değiĢkenlere değer olarak atanan veya fonksiyonlara
delil olarak geccedilirilebilir Schemelsquode Scheme kodunu oluĢturan ve
yorumlanmasını(interpretation) isteyen bir fonksiyon tanımlamak muumlmkuumlnduumlr
Bu muumlmkuumlnduumlr ccediluumlnkuuml yorumlayıcı(interpreter) kullanıcı tarafından
eriĢilebilen(user-available) bir fonksiyondur Fonksiyonel dillerin tasarımı
Matematiksel Fonksiyonlara dayalıdır
Kullanıcıya da yakın olan sağlam bir teorik temel fakat nispeten programların
koĢacağı makinelerin mimarileriyle ilgisizdir
Schemelsquoi ayrıca diğer dillerden ayıra en oumlnemli oumlzelliklerden biri de ccedilalıĢma
esnasında uygulamaya muumldahale edebilme iznini vermesidir Bu oumlzellik
sadece oumlnceden derlenmiĢ ve ağır plug-inler aracılığı ile geniĢletilen
uygulamalara kıyasla ccedilok daha buumlyuumlk bir avantaj
FONKSİYONLAR
Bu dilde fonksiyonlar birinci-sınıf varlıklardır(entities)
ndashĠfadelerin(expressions) değerleri ve listelerin elemanları olabilirler
ndashDeğiĢkenlere(variables) atanabilirler ve parametrelere geccedililebilirler
Scheme dilindeki formlar ikiye ayrılır
Temel Formlar define lambda if quote unquote unquote-splicing
quasiquote define-syntax let-syntax letrec-syntax syntax-rules set
( 5 4) sonuccedil olarak karĢımıza ccedilikacaktir
Ifadesi de yorum satırı haline getirir kodu
Ġf deyimini oumlrnekle accedilıklayalım
(If lsaquo expr rsaquo lsaquoexpr rsaquo lsaquoexpr rsaquo)
(If (= (+ 4 5) 9) t f)
Burada ilk verdiğimiz arguumlman (= (+ 4 5) 9) iĢleminin doğru olup
olmadığına bakar Eğer iĢlem doğruysa ccedilıktı olarak t yanlıĢsa f doumlner
Anlayacağınız uumlzere bu oumlzel durum proseduumlruuml koĢul gerektiren bir proseduumlr
bu durumda ilk verdiğimiz arguumlman da koĢulu belirleyen parccedila oluyor Oumlnce
o koĢulu inceleyen yorumlayıcı da daha sonra verdiğimiz diğer arguumlmanları
koĢula goumlre seccedilerek bize gereken ccedilıktıyı veriyor
Cond deyimi( cond[ltİfadegt ltİfadegt] )
Bir soruya dayalı alternatif cevapları seccedilmek istiyorsanız cond ifadesi kullanılır
ġart ifadesidir
Cond Ģeklinde koumlĢeli parantez maddeler dizisi iccedilerir
(Cond
((ltSıcaklık 50) Soğuk)
((gt Sıcaklık 90) Ccedilok sıcak )
(else Sorun yok))
Ayrıca else Scheme dilinde cond ifadesiyle kullanılır diğer dillerde olduğu gibi if
le değil Else ifadesi ise diğer koĢullar olmadığında else koĢulu olacaktır
Do ifadesi
(do ((i 0 (+ i 1))) ((gt i 2)) (display i) (newline))
Programın ccedilıktısı
0
1
2 dir Ġlk oumlnce i ye 0 atıyor ve i yi 1 er 1 er artırarak i 2 den buumlyuumlk olana
kadar doumlnduumlruumlyor display ile de ekrana yazdırıyornewline satırı ilede bir alt
satıra geccediliyor
While ifadesi
(While (koĢul ))
(Deyim1)
(Deyim2)
)
Let ifadesi
(let ((x 5)) ( x 2))
Ekran ccedilıktısı ise 10 olurLet yanındaki ilk koĢul ifadesinde değer ataması
yapılır ve diğer ifadede de matematiksel iĢlemi gerccedilekleĢtirir
Listeler
List fonksiyonu herhangi bir sayı alır ve değerlerini iccedileren bir liste doumlnduumlruumlr
gt(listKırmızı YeĢil Mavi)
(Kırmızı yeĢilmavi)
gt(list 1 2 3 4 5)
(1 2 3 4 5)
LIST
ndash Herhangi bir sayıda parametre alır elemanları bu parametreler olan bir liste
doumlnduumlruumlr
Ayrıca Bizim listelerde bulmak iccedilin uğraĢtığımız problemler iccedilin direk
fonksiyonlar var Mesela
first listenin ilk elemanını alır
Rest listenin ilk elemanı haricindekileri alır
gt (first (list 1 2 3 ))
1
gt(rest (list 1 2 3 ))
2 3
Listeler iccedilin bir oumlrnek daha
gt( list ( list 1 2 3 ) 5 (list a b c) )
((1 2 3) 5 (a b c))
Hello World Uygulaması
Programlamaya ilk baslayan herkesin yaptığı gibi bizde scheme dilinde
ekrana ―hello world yazdiralimScheme dilinde farkli seviyelerde farklı kodlar
kullanilirPretty Big de hemen hemen buumltuumln kodlar ccedilalıĢtığı iccedilin biz genelde bu
level ı kullaniyoruz
Display ―Hello World
(write Hello World )
―Hello World
Yukarı da goumlruumllen kodlar ccedilalıĢtırıldığında aynı ekran ccedilıktısına sahip
olurlarGoumlruumllduumlğuuml gibi ne noktalı virguumll nede fazla kelimeye gerek kalmıyor
Matematik Fonksiyonları
(Exp x) e^x in sonucunu doumlnduumlruumlr
(Log x) x sayısının logaritma değerini doumlnduumlruumlr
(sqrt x) x koumlkuumlnuumln karesini doumlnduumlruumlr
(max x1 x2) verilen listeden en buumlyuumlk sayıyı doumlnduumlruumlr
(min x1 x2) verilen listeden en kuku sayıyı doumlnduumlruumlr
(quotient x1 x2) x1x2 kesrinin boumlluumlmuumlnuuml doumlnduumlruumlr
(remian x1 x2) x1x2 kesrinin kalanini doumlnduumlruumlr
(modula x1 x2) x1 in x2 ye moduumlluuml sonucunu doumlnduumlruumlr
(gcm num1 num2 ) Verilen listenin en buumlyuumlk ortak boumlleni doumlnduumlruumlr
(lcm num1 num2 ) Verilen listenin en kuku ortak ccedilarpanı doumlnduumlruumlr
(Ceiling x) x ten kuku olmayan en kuku değeri doumlnduumlruumlr
( turn cate x) Mutlak değeri x in mutlak değerinden buumlyuumlk olmayan Xlsquo en
yakın değeri doumlnduumlruumlr
(round x) xe en yakın değere yuvarlıyor
İlişkisel Operatoumlrler
(=x 1) x 1 ise true doumlnduumlruumlr
(ltx y) x yden kuumlccediluumlkse true doumlnduumlruumlr
(gtx y) x y den buumlyuumlkse true doumlnduumlruumlr
(lt=x y) x yden kuku veya eĢitse true doumlnduumlruumlr
(gt=x y) x yden buumlyuumlk veya eĢitse true doumlnduumlruumlr
(eq x y) x ve y aynı ise true doumlnduumlruumlr
(equal x y) x ve y aynı yapıda olup aynı iccedileriğe sahipse true doumlnduumlruumlr
Tip Yuumlklemeleri
(procedure x)X fonksiyon ise true doumlnduumlruumlr
(null x) X boĢ bir liste ise true doumlnduumlruumlr
(zero x )X sıfır ise true doumlnduumlruumlr
(odd x) X tek ise true doumlnduumlruumlr
(even x) X tek ise true doumlnduumlruumlr
(symbolx) X tek ise true doumlnduumlruumlr
Asal Sayı Bulma Programı
(Define (divides m n)
(Cond
[(zero m) true]
[(amplt m n) false]
[else (divides (- m n) n)]
))
(Define (check-prime prime-cand divisor)
(cond
[(= 1 divisor) true]
[(divides prime-cand divisor) false]
[else (check-prime prime-cand (sub1 divisor))]))
(define (prime x)
(cond
[(= x 0) false]
[(= x 1) false]
[else (check-prime x (- x 1))]
))
KAYNAKLAR
wwwbilgisayarkavramlaricom
httpe-bergicom2010OcakScheme
httpwwwhtdporg2003ndash09ndash26Bookcurriculum-Z-H-1html
httptranslategooglecomtrtranslatehl=tramplangpair=en7Ctrampu=http httpprogramming-musingsorg20091223scheme-lectures-mostly httptranslategooglecomtrtranslatehl=trampsl=enampu=http3A2F2Fw
httpblogyollucomtagscheme
httpwwwschemecomtspl4 httpracket-langorgdownload
PROJE KONUSU SCHEME DİLİNİN OZELİKLERİNİ TAŞIYAN VE BU PDF DE
ANLATILAN KONULAR İLGİLİ 10 SORU HAZIRLANIP BUNLARIN CEVAPLARINI
KULANICIDAN İSTENİLMESİ
PROJEDE KULANILANLAR
LİSTE
FONKSİYON
KOŞUL CUumlMLESİ
DEĞER ATAMALARI
PROJE KODU
(define k 0)
(define doğrular 0)
(define yanlışlar 0)
sorular
(define a 1soru Lamda nedir)
(define A1 1 isimsiz fonksiyonları belirler)
(define B1 2 değer ataması yapar)
(define C1 3 pointer goumlrevi yapar)
(define b 2soru hangisi aritmetik fonksiyon değildir)
(define A2 1 SQRT )
(define B2 2 MIN )
(define C2 3 QUOTE )
(define c 3soru=list kulanımı nasıldır)
(define A3 (1 LIST (A) (B) (C) (D)))
(define B3 (2 LIST A B C D) )
(define C3 (3 LIST A B C D) )
(define d 4soru=equalsimp ne demek)
(define A4 1 iki basit liste alır ve eşitliğini kontrol eder)
(define B4 2 listeleri birbirine atar)
(define C4 3 listeleri eşitler)
(define e1 5soru=append ne işe yarar)
(define A5 1 İki listeyi peş peşe ekler)
(define B5 2 iki listeyi ccedilıkarır)
(define C5 3 iki listeyi ccedilarpar)
(define f 6soru set isimlere değer atar doğrumudur)
(define A6 1 doğru)
(define B6 2 yanlis)
doğru cevap listesi
(define DListe (list 1 1 1 2 3 1) )
şıkları yazdırma
(define (Cevaplar cevapListesi)
( cond [(null cevapListesi) 0]
[else (Cevaplar (rest cevapListesi))
(display (first cevapListesi))
(display n)
]))
doğru yanlış kontroluuml
(define kon
(lambda (k FDL)
(cond ((= k FDL) (display Tebrikler )nn)(set dogrular (+ 1 dogrular)))
else ( display Maalesef olmadı (nn)(set yanlislar (+ 1 yanlislar))])))
soru ve şıkları yazdırıp cevap kontroluumlnuuml ccedilağırma
(define (Sorular soruListesi cevpListesi DListesi )
( cond [(null soruListesi) 0]
[else
(Sorular (rest soruListesi) (rest cevpListesi) (rest DListesi ))
(display (first soruListesi))
(display n)
(Cevaplar (first cevpListesi)) (set k (read)) (kon k (first DListesi)) ]))
şık listesi
(define CListe (list(list B6 A6) (list C5 B5 A5) (list C4 B4 A4) (list C3 B3 A3) (list C2 B2
A2)(list C1 B1 A1)))
Sorular fonksiyonunu ccedilağırma
(Sorular (list f e1 d c b a) CListe DListe )
yapılan doğru ve yanlış sayısını goumlsterme
(display Doğru cevap sayısı )
dogrular
(display Yanlış cevap sayısı )
yanlislar
EMEĞİ GECcedilEN BUumlTUumlN HERKESE TEŞEKUumlRLERİMİZİ SUNUYORUZhellip
KULLANICI ETKİLEŞİMİ
Bu dilde fonksiyonlar değiĢkenlere değer olarak atanan veya fonksiyonlara
delil olarak geccedilirilebilir Schemelsquode Scheme kodunu oluĢturan ve
yorumlanmasını(interpretation) isteyen bir fonksiyon tanımlamak muumlmkuumlnduumlr
Bu muumlmkuumlnduumlr ccediluumlnkuuml yorumlayıcı(interpreter) kullanıcı tarafından
eriĢilebilen(user-available) bir fonksiyondur Fonksiyonel dillerin tasarımı
Matematiksel Fonksiyonlara dayalıdır
Kullanıcıya da yakın olan sağlam bir teorik temel fakat nispeten programların
koĢacağı makinelerin mimarileriyle ilgisizdir
Schemelsquoi ayrıca diğer dillerden ayıra en oumlnemli oumlzelliklerden biri de ccedilalıĢma
esnasında uygulamaya muumldahale edebilme iznini vermesidir Bu oumlzellik
sadece oumlnceden derlenmiĢ ve ağır plug-inler aracılığı ile geniĢletilen
uygulamalara kıyasla ccedilok daha buumlyuumlk bir avantaj
FONKSİYONLAR
Bu dilde fonksiyonlar birinci-sınıf varlıklardır(entities)
ndashĠfadelerin(expressions) değerleri ve listelerin elemanları olabilirler
ndashDeğiĢkenlere(variables) atanabilirler ve parametrelere geccedililebilirler
Scheme dilindeki formlar ikiye ayrılır
Temel Formlar define lambda if quote unquote unquote-splicing
quasiquote define-syntax let-syntax letrec-syntax syntax-rules set
( 5 4) sonuccedil olarak karĢımıza ccedilikacaktir
Ifadesi de yorum satırı haline getirir kodu
Ġf deyimini oumlrnekle accedilıklayalım
(If lsaquo expr rsaquo lsaquoexpr rsaquo lsaquoexpr rsaquo)
(If (= (+ 4 5) 9) t f)
Burada ilk verdiğimiz arguumlman (= (+ 4 5) 9) iĢleminin doğru olup
olmadığına bakar Eğer iĢlem doğruysa ccedilıktı olarak t yanlıĢsa f doumlner
Anlayacağınız uumlzere bu oumlzel durum proseduumlruuml koĢul gerektiren bir proseduumlr
bu durumda ilk verdiğimiz arguumlman da koĢulu belirleyen parccedila oluyor Oumlnce
o koĢulu inceleyen yorumlayıcı da daha sonra verdiğimiz diğer arguumlmanları
koĢula goumlre seccedilerek bize gereken ccedilıktıyı veriyor
Cond deyimi( cond[ltİfadegt ltİfadegt] )
Bir soruya dayalı alternatif cevapları seccedilmek istiyorsanız cond ifadesi kullanılır
ġart ifadesidir
Cond Ģeklinde koumlĢeli parantez maddeler dizisi iccedilerir
(Cond
((ltSıcaklık 50) Soğuk)
((gt Sıcaklık 90) Ccedilok sıcak )
(else Sorun yok))
Ayrıca else Scheme dilinde cond ifadesiyle kullanılır diğer dillerde olduğu gibi if
le değil Else ifadesi ise diğer koĢullar olmadığında else koĢulu olacaktır
Do ifadesi
(do ((i 0 (+ i 1))) ((gt i 2)) (display i) (newline))
Programın ccedilıktısı
0
1
2 dir Ġlk oumlnce i ye 0 atıyor ve i yi 1 er 1 er artırarak i 2 den buumlyuumlk olana
kadar doumlnduumlruumlyor display ile de ekrana yazdırıyornewline satırı ilede bir alt
satıra geccediliyor
While ifadesi
(While (koĢul ))
(Deyim1)
(Deyim2)
)
Let ifadesi
(let ((x 5)) ( x 2))
Ekran ccedilıktısı ise 10 olurLet yanındaki ilk koĢul ifadesinde değer ataması
yapılır ve diğer ifadede de matematiksel iĢlemi gerccedilekleĢtirir
Listeler
List fonksiyonu herhangi bir sayı alır ve değerlerini iccedileren bir liste doumlnduumlruumlr
gt(listKırmızı YeĢil Mavi)
(Kırmızı yeĢilmavi)
gt(list 1 2 3 4 5)
(1 2 3 4 5)
LIST
ndash Herhangi bir sayıda parametre alır elemanları bu parametreler olan bir liste
doumlnduumlruumlr
Ayrıca Bizim listelerde bulmak iccedilin uğraĢtığımız problemler iccedilin direk
fonksiyonlar var Mesela
first listenin ilk elemanını alır
Rest listenin ilk elemanı haricindekileri alır
gt (first (list 1 2 3 ))
1
gt(rest (list 1 2 3 ))
2 3
Listeler iccedilin bir oumlrnek daha
gt( list ( list 1 2 3 ) 5 (list a b c) )
((1 2 3) 5 (a b c))
Hello World Uygulaması
Programlamaya ilk baslayan herkesin yaptığı gibi bizde scheme dilinde
ekrana ―hello world yazdiralimScheme dilinde farkli seviyelerde farklı kodlar
kullanilirPretty Big de hemen hemen buumltuumln kodlar ccedilalıĢtığı iccedilin biz genelde bu
level ı kullaniyoruz
Display ―Hello World
(write Hello World )
―Hello World
Yukarı da goumlruumllen kodlar ccedilalıĢtırıldığında aynı ekran ccedilıktısına sahip
olurlarGoumlruumllduumlğuuml gibi ne noktalı virguumll nede fazla kelimeye gerek kalmıyor
Matematik Fonksiyonları
(Exp x) e^x in sonucunu doumlnduumlruumlr
(Log x) x sayısının logaritma değerini doumlnduumlruumlr
(sqrt x) x koumlkuumlnuumln karesini doumlnduumlruumlr
(max x1 x2) verilen listeden en buumlyuumlk sayıyı doumlnduumlruumlr
(min x1 x2) verilen listeden en kuku sayıyı doumlnduumlruumlr
(quotient x1 x2) x1x2 kesrinin boumlluumlmuumlnuuml doumlnduumlruumlr
(remian x1 x2) x1x2 kesrinin kalanini doumlnduumlruumlr
(modula x1 x2) x1 in x2 ye moduumlluuml sonucunu doumlnduumlruumlr
(gcm num1 num2 ) Verilen listenin en buumlyuumlk ortak boumlleni doumlnduumlruumlr
(lcm num1 num2 ) Verilen listenin en kuku ortak ccedilarpanı doumlnduumlruumlr
(Ceiling x) x ten kuku olmayan en kuku değeri doumlnduumlruumlr
( turn cate x) Mutlak değeri x in mutlak değerinden buumlyuumlk olmayan Xlsquo en
yakın değeri doumlnduumlruumlr
(round x) xe en yakın değere yuvarlıyor
İlişkisel Operatoumlrler
(=x 1) x 1 ise true doumlnduumlruumlr
(ltx y) x yden kuumlccediluumlkse true doumlnduumlruumlr
(gtx y) x y den buumlyuumlkse true doumlnduumlruumlr
(lt=x y) x yden kuku veya eĢitse true doumlnduumlruumlr
(gt=x y) x yden buumlyuumlk veya eĢitse true doumlnduumlruumlr
(eq x y) x ve y aynı ise true doumlnduumlruumlr
(equal x y) x ve y aynı yapıda olup aynı iccedileriğe sahipse true doumlnduumlruumlr
Tip Yuumlklemeleri
(procedure x)X fonksiyon ise true doumlnduumlruumlr
(null x) X boĢ bir liste ise true doumlnduumlruumlr
(zero x )X sıfır ise true doumlnduumlruumlr
(odd x) X tek ise true doumlnduumlruumlr
(even x) X tek ise true doumlnduumlruumlr
(symbolx) X tek ise true doumlnduumlruumlr
Asal Sayı Bulma Programı
(Define (divides m n)
(Cond
[(zero m) true]
[(amplt m n) false]
[else (divides (- m n) n)]
))
(Define (check-prime prime-cand divisor)
(cond
[(= 1 divisor) true]
[(divides prime-cand divisor) false]
[else (check-prime prime-cand (sub1 divisor))]))
(define (prime x)
(cond
[(= x 0) false]
[(= x 1) false]
[else (check-prime x (- x 1))]
))
KAYNAKLAR
wwwbilgisayarkavramlaricom
httpe-bergicom2010OcakScheme
httpwwwhtdporg2003ndash09ndash26Bookcurriculum-Z-H-1html
httptranslategooglecomtrtranslatehl=tramplangpair=en7Ctrampu=http httpprogramming-musingsorg20091223scheme-lectures-mostly httptranslategooglecomtrtranslatehl=trampsl=enampu=http3A2F2Fw
httpblogyollucomtagscheme
httpwwwschemecomtspl4 httpracket-langorgdownload
PROJE KONUSU SCHEME DİLİNİN OZELİKLERİNİ TAŞIYAN VE BU PDF DE
ANLATILAN KONULAR İLGİLİ 10 SORU HAZIRLANIP BUNLARIN CEVAPLARINI
KULANICIDAN İSTENİLMESİ
PROJEDE KULANILANLAR
LİSTE
FONKSİYON
KOŞUL CUumlMLESİ
DEĞER ATAMALARI
PROJE KODU
(define k 0)
(define doğrular 0)
(define yanlışlar 0)
sorular
(define a 1soru Lamda nedir)
(define A1 1 isimsiz fonksiyonları belirler)
(define B1 2 değer ataması yapar)
(define C1 3 pointer goumlrevi yapar)
(define b 2soru hangisi aritmetik fonksiyon değildir)
(define A2 1 SQRT )
(define B2 2 MIN )
(define C2 3 QUOTE )
(define c 3soru=list kulanımı nasıldır)
(define A3 (1 LIST (A) (B) (C) (D)))
(define B3 (2 LIST A B C D) )
(define C3 (3 LIST A B C D) )
(define d 4soru=equalsimp ne demek)
(define A4 1 iki basit liste alır ve eşitliğini kontrol eder)
(define B4 2 listeleri birbirine atar)
(define C4 3 listeleri eşitler)
(define e1 5soru=append ne işe yarar)
(define A5 1 İki listeyi peş peşe ekler)
(define B5 2 iki listeyi ccedilıkarır)
(define C5 3 iki listeyi ccedilarpar)
(define f 6soru set isimlere değer atar doğrumudur)
(define A6 1 doğru)
(define B6 2 yanlis)
doğru cevap listesi
(define DListe (list 1 1 1 2 3 1) )
şıkları yazdırma
(define (Cevaplar cevapListesi)
( cond [(null cevapListesi) 0]
[else (Cevaplar (rest cevapListesi))
(display (first cevapListesi))
(display n)
]))
doğru yanlış kontroluuml
(define kon
(lambda (k FDL)
(cond ((= k FDL) (display Tebrikler )nn)(set dogrular (+ 1 dogrular)))
else ( display Maalesef olmadı (nn)(set yanlislar (+ 1 yanlislar))])))
soru ve şıkları yazdırıp cevap kontroluumlnuuml ccedilağırma
(define (Sorular soruListesi cevpListesi DListesi )
( cond [(null soruListesi) 0]
[else
(Sorular (rest soruListesi) (rest cevpListesi) (rest DListesi ))
(display (first soruListesi))
(display n)
(Cevaplar (first cevpListesi)) (set k (read)) (kon k (first DListesi)) ]))
şık listesi
(define CListe (list(list B6 A6) (list C5 B5 A5) (list C4 B4 A4) (list C3 B3 A3) (list C2 B2
A2)(list C1 B1 A1)))
Sorular fonksiyonunu ccedilağırma
(Sorular (list f e1 d c b a) CListe DListe )
yapılan doğru ve yanlış sayısını goumlsterme
(display Doğru cevap sayısı )
dogrular
(display Yanlış cevap sayısı )
yanlislar
EMEĞİ GECcedilEN BUumlTUumlN HERKESE TEŞEKUumlRLERİMİZİ SUNUYORUZhellip
Burada ilk verdiğimiz arguumlman (= (+ 4 5) 9) iĢleminin doğru olup
olmadığına bakar Eğer iĢlem doğruysa ccedilıktı olarak t yanlıĢsa f doumlner
Anlayacağınız uumlzere bu oumlzel durum proseduumlruuml koĢul gerektiren bir proseduumlr
bu durumda ilk verdiğimiz arguumlman da koĢulu belirleyen parccedila oluyor Oumlnce
o koĢulu inceleyen yorumlayıcı da daha sonra verdiğimiz diğer arguumlmanları
koĢula goumlre seccedilerek bize gereken ccedilıktıyı veriyor
Cond deyimi( cond[ltİfadegt ltİfadegt] )
Bir soruya dayalı alternatif cevapları seccedilmek istiyorsanız cond ifadesi kullanılır
ġart ifadesidir
Cond Ģeklinde koumlĢeli parantez maddeler dizisi iccedilerir
(Cond
((ltSıcaklık 50) Soğuk)
((gt Sıcaklık 90) Ccedilok sıcak )
(else Sorun yok))
Ayrıca else Scheme dilinde cond ifadesiyle kullanılır diğer dillerde olduğu gibi if
le değil Else ifadesi ise diğer koĢullar olmadığında else koĢulu olacaktır
Do ifadesi
(do ((i 0 (+ i 1))) ((gt i 2)) (display i) (newline))
Programın ccedilıktısı
0
1
2 dir Ġlk oumlnce i ye 0 atıyor ve i yi 1 er 1 er artırarak i 2 den buumlyuumlk olana
kadar doumlnduumlruumlyor display ile de ekrana yazdırıyornewline satırı ilede bir alt
satıra geccediliyor
While ifadesi
(While (koĢul ))
(Deyim1)
(Deyim2)
)
Let ifadesi
(let ((x 5)) ( x 2))
Ekran ccedilıktısı ise 10 olurLet yanındaki ilk koĢul ifadesinde değer ataması
yapılır ve diğer ifadede de matematiksel iĢlemi gerccedilekleĢtirir
Listeler
List fonksiyonu herhangi bir sayı alır ve değerlerini iccedileren bir liste doumlnduumlruumlr
gt(listKırmızı YeĢil Mavi)
(Kırmızı yeĢilmavi)
gt(list 1 2 3 4 5)
(1 2 3 4 5)
LIST
ndash Herhangi bir sayıda parametre alır elemanları bu parametreler olan bir liste
doumlnduumlruumlr
Ayrıca Bizim listelerde bulmak iccedilin uğraĢtığımız problemler iccedilin direk
fonksiyonlar var Mesela
first listenin ilk elemanını alır
Rest listenin ilk elemanı haricindekileri alır
gt (first (list 1 2 3 ))
1
gt(rest (list 1 2 3 ))
2 3
Listeler iccedilin bir oumlrnek daha
gt( list ( list 1 2 3 ) 5 (list a b c) )
((1 2 3) 5 (a b c))
Hello World Uygulaması
Programlamaya ilk baslayan herkesin yaptığı gibi bizde scheme dilinde
ekrana ―hello world yazdiralimScheme dilinde farkli seviyelerde farklı kodlar
kullanilirPretty Big de hemen hemen buumltuumln kodlar ccedilalıĢtığı iccedilin biz genelde bu
level ı kullaniyoruz
Display ―Hello World
(write Hello World )
―Hello World
Yukarı da goumlruumllen kodlar ccedilalıĢtırıldığında aynı ekran ccedilıktısına sahip
olurlarGoumlruumllduumlğuuml gibi ne noktalı virguumll nede fazla kelimeye gerek kalmıyor
Matematik Fonksiyonları
(Exp x) e^x in sonucunu doumlnduumlruumlr
(Log x) x sayısının logaritma değerini doumlnduumlruumlr
(sqrt x) x koumlkuumlnuumln karesini doumlnduumlruumlr
(max x1 x2) verilen listeden en buumlyuumlk sayıyı doumlnduumlruumlr
(min x1 x2) verilen listeden en kuku sayıyı doumlnduumlruumlr
(quotient x1 x2) x1x2 kesrinin boumlluumlmuumlnuuml doumlnduumlruumlr
(remian x1 x2) x1x2 kesrinin kalanini doumlnduumlruumlr
(modula x1 x2) x1 in x2 ye moduumlluuml sonucunu doumlnduumlruumlr
(gcm num1 num2 ) Verilen listenin en buumlyuumlk ortak boumlleni doumlnduumlruumlr
(lcm num1 num2 ) Verilen listenin en kuku ortak ccedilarpanı doumlnduumlruumlr
(Ceiling x) x ten kuku olmayan en kuku değeri doumlnduumlruumlr
( turn cate x) Mutlak değeri x in mutlak değerinden buumlyuumlk olmayan Xlsquo en
yakın değeri doumlnduumlruumlr
(round x) xe en yakın değere yuvarlıyor
İlişkisel Operatoumlrler
(=x 1) x 1 ise true doumlnduumlruumlr
(ltx y) x yden kuumlccediluumlkse true doumlnduumlruumlr
(gtx y) x y den buumlyuumlkse true doumlnduumlruumlr
(lt=x y) x yden kuku veya eĢitse true doumlnduumlruumlr
(gt=x y) x yden buumlyuumlk veya eĢitse true doumlnduumlruumlr
(eq x y) x ve y aynı ise true doumlnduumlruumlr
(equal x y) x ve y aynı yapıda olup aynı iccedileriğe sahipse true doumlnduumlruumlr
Tip Yuumlklemeleri
(procedure x)X fonksiyon ise true doumlnduumlruumlr
(null x) X boĢ bir liste ise true doumlnduumlruumlr
(zero x )X sıfır ise true doumlnduumlruumlr
(odd x) X tek ise true doumlnduumlruumlr
(even x) X tek ise true doumlnduumlruumlr
(symbolx) X tek ise true doumlnduumlruumlr
Asal Sayı Bulma Programı
(Define (divides m n)
(Cond
[(zero m) true]
[(amplt m n) false]
[else (divides (- m n) n)]
))
(Define (check-prime prime-cand divisor)
(cond
[(= 1 divisor) true]
[(divides prime-cand divisor) false]
[else (check-prime prime-cand (sub1 divisor))]))
(define (prime x)
(cond
[(= x 0) false]
[(= x 1) false]
[else (check-prime x (- x 1))]
))
KAYNAKLAR
wwwbilgisayarkavramlaricom
httpe-bergicom2010OcakScheme
httpwwwhtdporg2003ndash09ndash26Bookcurriculum-Z-H-1html
httptranslategooglecomtrtranslatehl=tramplangpair=en7Ctrampu=http httpprogramming-musingsorg20091223scheme-lectures-mostly httptranslategooglecomtrtranslatehl=trampsl=enampu=http3A2F2Fw
httpblogyollucomtagscheme
httpwwwschemecomtspl4 httpracket-langorgdownload
PROJE KONUSU SCHEME DİLİNİN OZELİKLERİNİ TAŞIYAN VE BU PDF DE
ANLATILAN KONULAR İLGİLİ 10 SORU HAZIRLANIP BUNLARIN CEVAPLARINI
KULANICIDAN İSTENİLMESİ
PROJEDE KULANILANLAR
LİSTE
FONKSİYON
KOŞUL CUumlMLESİ
DEĞER ATAMALARI
PROJE KODU
(define k 0)
(define doğrular 0)
(define yanlışlar 0)
sorular
(define a 1soru Lamda nedir)
(define A1 1 isimsiz fonksiyonları belirler)
(define B1 2 değer ataması yapar)
(define C1 3 pointer goumlrevi yapar)
(define b 2soru hangisi aritmetik fonksiyon değildir)
(define A2 1 SQRT )
(define B2 2 MIN )
(define C2 3 QUOTE )
(define c 3soru=list kulanımı nasıldır)
(define A3 (1 LIST (A) (B) (C) (D)))
(define B3 (2 LIST A B C D) )
(define C3 (3 LIST A B C D) )
(define d 4soru=equalsimp ne demek)
(define A4 1 iki basit liste alır ve eşitliğini kontrol eder)
(define B4 2 listeleri birbirine atar)
(define C4 3 listeleri eşitler)
(define e1 5soru=append ne işe yarar)
(define A5 1 İki listeyi peş peşe ekler)
(define B5 2 iki listeyi ccedilıkarır)
(define C5 3 iki listeyi ccedilarpar)
(define f 6soru set isimlere değer atar doğrumudur)
(define A6 1 doğru)
(define B6 2 yanlis)
doğru cevap listesi
(define DListe (list 1 1 1 2 3 1) )
şıkları yazdırma
(define (Cevaplar cevapListesi)
( cond [(null cevapListesi) 0]
[else (Cevaplar (rest cevapListesi))
(display (first cevapListesi))
(display n)
]))
doğru yanlış kontroluuml
(define kon
(lambda (k FDL)
(cond ((= k FDL) (display Tebrikler )nn)(set dogrular (+ 1 dogrular)))
else ( display Maalesef olmadı (nn)(set yanlislar (+ 1 yanlislar))])))
soru ve şıkları yazdırıp cevap kontroluumlnuuml ccedilağırma
(define (Sorular soruListesi cevpListesi DListesi )
( cond [(null soruListesi) 0]
[else
(Sorular (rest soruListesi) (rest cevpListesi) (rest DListesi ))
(display (first soruListesi))
(display n)
(Cevaplar (first cevpListesi)) (set k (read)) (kon k (first DListesi)) ]))
şık listesi
(define CListe (list(list B6 A6) (list C5 B5 A5) (list C4 B4 A4) (list C3 B3 A3) (list C2 B2
A2)(list C1 B1 A1)))
Sorular fonksiyonunu ccedilağırma
(Sorular (list f e1 d c b a) CListe DListe )
yapılan doğru ve yanlış sayısını goumlsterme
(display Doğru cevap sayısı )
dogrular
(display Yanlış cevap sayısı )
yanlislar
EMEĞİ GECcedilEN BUumlTUumlN HERKESE TEŞEKUumlRLERİMİZİ SUNUYORUZhellip
Ekran ccedilıktısı ise 10 olurLet yanındaki ilk koĢul ifadesinde değer ataması
yapılır ve diğer ifadede de matematiksel iĢlemi gerccedilekleĢtirir
Listeler
List fonksiyonu herhangi bir sayı alır ve değerlerini iccedileren bir liste doumlnduumlruumlr
gt(listKırmızı YeĢil Mavi)
(Kırmızı yeĢilmavi)
gt(list 1 2 3 4 5)
(1 2 3 4 5)
LIST
ndash Herhangi bir sayıda parametre alır elemanları bu parametreler olan bir liste
doumlnduumlruumlr
Ayrıca Bizim listelerde bulmak iccedilin uğraĢtığımız problemler iccedilin direk
fonksiyonlar var Mesela
first listenin ilk elemanını alır
Rest listenin ilk elemanı haricindekileri alır
gt (first (list 1 2 3 ))
1
gt(rest (list 1 2 3 ))
2 3
Listeler iccedilin bir oumlrnek daha
gt( list ( list 1 2 3 ) 5 (list a b c) )
((1 2 3) 5 (a b c))
Hello World Uygulaması
Programlamaya ilk baslayan herkesin yaptığı gibi bizde scheme dilinde
ekrana ―hello world yazdiralimScheme dilinde farkli seviyelerde farklı kodlar
kullanilirPretty Big de hemen hemen buumltuumln kodlar ccedilalıĢtığı iccedilin biz genelde bu
level ı kullaniyoruz
Display ―Hello World
(write Hello World )
―Hello World
Yukarı da goumlruumllen kodlar ccedilalıĢtırıldığında aynı ekran ccedilıktısına sahip
olurlarGoumlruumllduumlğuuml gibi ne noktalı virguumll nede fazla kelimeye gerek kalmıyor
Matematik Fonksiyonları
(Exp x) e^x in sonucunu doumlnduumlruumlr
(Log x) x sayısının logaritma değerini doumlnduumlruumlr
(sqrt x) x koumlkuumlnuumln karesini doumlnduumlruumlr
(max x1 x2) verilen listeden en buumlyuumlk sayıyı doumlnduumlruumlr
(min x1 x2) verilen listeden en kuku sayıyı doumlnduumlruumlr
(quotient x1 x2) x1x2 kesrinin boumlluumlmuumlnuuml doumlnduumlruumlr
(remian x1 x2) x1x2 kesrinin kalanini doumlnduumlruumlr
(modula x1 x2) x1 in x2 ye moduumlluuml sonucunu doumlnduumlruumlr
(gcm num1 num2 ) Verilen listenin en buumlyuumlk ortak boumlleni doumlnduumlruumlr
(lcm num1 num2 ) Verilen listenin en kuku ortak ccedilarpanı doumlnduumlruumlr
(Ceiling x) x ten kuku olmayan en kuku değeri doumlnduumlruumlr
( turn cate x) Mutlak değeri x in mutlak değerinden buumlyuumlk olmayan Xlsquo en
yakın değeri doumlnduumlruumlr
(round x) xe en yakın değere yuvarlıyor
İlişkisel Operatoumlrler
(=x 1) x 1 ise true doumlnduumlruumlr
(ltx y) x yden kuumlccediluumlkse true doumlnduumlruumlr
(gtx y) x y den buumlyuumlkse true doumlnduumlruumlr
(lt=x y) x yden kuku veya eĢitse true doumlnduumlruumlr
(gt=x y) x yden buumlyuumlk veya eĢitse true doumlnduumlruumlr
(eq x y) x ve y aynı ise true doumlnduumlruumlr
(equal x y) x ve y aynı yapıda olup aynı iccedileriğe sahipse true doumlnduumlruumlr
Tip Yuumlklemeleri
(procedure x)X fonksiyon ise true doumlnduumlruumlr
(null x) X boĢ bir liste ise true doumlnduumlruumlr
(zero x )X sıfır ise true doumlnduumlruumlr
(odd x) X tek ise true doumlnduumlruumlr
(even x) X tek ise true doumlnduumlruumlr
(symbolx) X tek ise true doumlnduumlruumlr
Asal Sayı Bulma Programı
(Define (divides m n)
(Cond
[(zero m) true]
[(amplt m n) false]
[else (divides (- m n) n)]
))
(Define (check-prime prime-cand divisor)
(cond
[(= 1 divisor) true]
[(divides prime-cand divisor) false]
[else (check-prime prime-cand (sub1 divisor))]))
(define (prime x)
(cond
[(= x 0) false]
[(= x 1) false]
[else (check-prime x (- x 1))]
))
KAYNAKLAR
wwwbilgisayarkavramlaricom
httpe-bergicom2010OcakScheme
httpwwwhtdporg2003ndash09ndash26Bookcurriculum-Z-H-1html
httptranslategooglecomtrtranslatehl=tramplangpair=en7Ctrampu=http httpprogramming-musingsorg20091223scheme-lectures-mostly httptranslategooglecomtrtranslatehl=trampsl=enampu=http3A2F2Fw
httpblogyollucomtagscheme
httpwwwschemecomtspl4 httpracket-langorgdownload
PROJE KONUSU SCHEME DİLİNİN OZELİKLERİNİ TAŞIYAN VE BU PDF DE
ANLATILAN KONULAR İLGİLİ 10 SORU HAZIRLANIP BUNLARIN CEVAPLARINI
KULANICIDAN İSTENİLMESİ
PROJEDE KULANILANLAR
LİSTE
FONKSİYON
KOŞUL CUumlMLESİ
DEĞER ATAMALARI
PROJE KODU
(define k 0)
(define doğrular 0)
(define yanlışlar 0)
sorular
(define a 1soru Lamda nedir)
(define A1 1 isimsiz fonksiyonları belirler)
(define B1 2 değer ataması yapar)
(define C1 3 pointer goumlrevi yapar)
(define b 2soru hangisi aritmetik fonksiyon değildir)
(define A2 1 SQRT )
(define B2 2 MIN )
(define C2 3 QUOTE )
(define c 3soru=list kulanımı nasıldır)
(define A3 (1 LIST (A) (B) (C) (D)))
(define B3 (2 LIST A B C D) )
(define C3 (3 LIST A B C D) )
(define d 4soru=equalsimp ne demek)
(define A4 1 iki basit liste alır ve eşitliğini kontrol eder)
(define B4 2 listeleri birbirine atar)
(define C4 3 listeleri eşitler)
(define e1 5soru=append ne işe yarar)
(define A5 1 İki listeyi peş peşe ekler)
(define B5 2 iki listeyi ccedilıkarır)
(define C5 3 iki listeyi ccedilarpar)
(define f 6soru set isimlere değer atar doğrumudur)
(define A6 1 doğru)
(define B6 2 yanlis)
doğru cevap listesi
(define DListe (list 1 1 1 2 3 1) )
şıkları yazdırma
(define (Cevaplar cevapListesi)
( cond [(null cevapListesi) 0]
[else (Cevaplar (rest cevapListesi))
(display (first cevapListesi))
(display n)
]))
doğru yanlış kontroluuml
(define kon
(lambda (k FDL)
(cond ((= k FDL) (display Tebrikler )nn)(set dogrular (+ 1 dogrular)))
else ( display Maalesef olmadı (nn)(set yanlislar (+ 1 yanlislar))])))
soru ve şıkları yazdırıp cevap kontroluumlnuuml ccedilağırma
(define (Sorular soruListesi cevpListesi DListesi )
( cond [(null soruListesi) 0]
[else
(Sorular (rest soruListesi) (rest cevpListesi) (rest DListesi ))
(display (first soruListesi))
(display n)
(Cevaplar (first cevpListesi)) (set k (read)) (kon k (first DListesi)) ]))
şık listesi
(define CListe (list(list B6 A6) (list C5 B5 A5) (list C4 B4 A4) (list C3 B3 A3) (list C2 B2
A2)(list C1 B1 A1)))
Sorular fonksiyonunu ccedilağırma
(Sorular (list f e1 d c b a) CListe DListe )
yapılan doğru ve yanlış sayısını goumlsterme
(display Doğru cevap sayısı )
dogrular
(display Yanlış cevap sayısı )
yanlislar
EMEĞİ GECcedilEN BUumlTUumlN HERKESE TEŞEKUumlRLERİMİZİ SUNUYORUZhellip
Hello World Uygulaması
Programlamaya ilk baslayan herkesin yaptığı gibi bizde scheme dilinde
ekrana ―hello world yazdiralimScheme dilinde farkli seviyelerde farklı kodlar
kullanilirPretty Big de hemen hemen buumltuumln kodlar ccedilalıĢtığı iccedilin biz genelde bu
level ı kullaniyoruz
Display ―Hello World
(write Hello World )
―Hello World
Yukarı da goumlruumllen kodlar ccedilalıĢtırıldığında aynı ekran ccedilıktısına sahip
olurlarGoumlruumllduumlğuuml gibi ne noktalı virguumll nede fazla kelimeye gerek kalmıyor
Matematik Fonksiyonları
(Exp x) e^x in sonucunu doumlnduumlruumlr
(Log x) x sayısının logaritma değerini doumlnduumlruumlr
(sqrt x) x koumlkuumlnuumln karesini doumlnduumlruumlr
(max x1 x2) verilen listeden en buumlyuumlk sayıyı doumlnduumlruumlr
(min x1 x2) verilen listeden en kuku sayıyı doumlnduumlruumlr
(quotient x1 x2) x1x2 kesrinin boumlluumlmuumlnuuml doumlnduumlruumlr
(remian x1 x2) x1x2 kesrinin kalanini doumlnduumlruumlr
(modula x1 x2) x1 in x2 ye moduumlluuml sonucunu doumlnduumlruumlr
(gcm num1 num2 ) Verilen listenin en buumlyuumlk ortak boumlleni doumlnduumlruumlr
(lcm num1 num2 ) Verilen listenin en kuku ortak ccedilarpanı doumlnduumlruumlr
(Ceiling x) x ten kuku olmayan en kuku değeri doumlnduumlruumlr
( turn cate x) Mutlak değeri x in mutlak değerinden buumlyuumlk olmayan Xlsquo en
yakın değeri doumlnduumlruumlr
(round x) xe en yakın değere yuvarlıyor
İlişkisel Operatoumlrler
(=x 1) x 1 ise true doumlnduumlruumlr
(ltx y) x yden kuumlccediluumlkse true doumlnduumlruumlr
(gtx y) x y den buumlyuumlkse true doumlnduumlruumlr
(lt=x y) x yden kuku veya eĢitse true doumlnduumlruumlr
(gt=x y) x yden buumlyuumlk veya eĢitse true doumlnduumlruumlr
(eq x y) x ve y aynı ise true doumlnduumlruumlr
(equal x y) x ve y aynı yapıda olup aynı iccedileriğe sahipse true doumlnduumlruumlr
Tip Yuumlklemeleri
(procedure x)X fonksiyon ise true doumlnduumlruumlr
(null x) X boĢ bir liste ise true doumlnduumlruumlr
(zero x )X sıfır ise true doumlnduumlruumlr
(odd x) X tek ise true doumlnduumlruumlr
(even x) X tek ise true doumlnduumlruumlr
(symbolx) X tek ise true doumlnduumlruumlr
Asal Sayı Bulma Programı
(Define (divides m n)
(Cond
[(zero m) true]
[(amplt m n) false]
[else (divides (- m n) n)]
))
(Define (check-prime prime-cand divisor)
(cond
[(= 1 divisor) true]
[(divides prime-cand divisor) false]
[else (check-prime prime-cand (sub1 divisor))]))
(define (prime x)
(cond
[(= x 0) false]
[(= x 1) false]
[else (check-prime x (- x 1))]
))
KAYNAKLAR
wwwbilgisayarkavramlaricom
httpe-bergicom2010OcakScheme
httpwwwhtdporg2003ndash09ndash26Bookcurriculum-Z-H-1html
httptranslategooglecomtrtranslatehl=tramplangpair=en7Ctrampu=http httpprogramming-musingsorg20091223scheme-lectures-mostly httptranslategooglecomtrtranslatehl=trampsl=enampu=http3A2F2Fw
httpblogyollucomtagscheme
httpwwwschemecomtspl4 httpracket-langorgdownload
PROJE KONUSU SCHEME DİLİNİN OZELİKLERİNİ TAŞIYAN VE BU PDF DE
ANLATILAN KONULAR İLGİLİ 10 SORU HAZIRLANIP BUNLARIN CEVAPLARINI
KULANICIDAN İSTENİLMESİ
PROJEDE KULANILANLAR
LİSTE
FONKSİYON
KOŞUL CUumlMLESİ
DEĞER ATAMALARI
PROJE KODU
(define k 0)
(define doğrular 0)
(define yanlışlar 0)
sorular
(define a 1soru Lamda nedir)
(define A1 1 isimsiz fonksiyonları belirler)
(define B1 2 değer ataması yapar)
(define C1 3 pointer goumlrevi yapar)
(define b 2soru hangisi aritmetik fonksiyon değildir)
(define A2 1 SQRT )
(define B2 2 MIN )
(define C2 3 QUOTE )
(define c 3soru=list kulanımı nasıldır)
(define A3 (1 LIST (A) (B) (C) (D)))
(define B3 (2 LIST A B C D) )
(define C3 (3 LIST A B C D) )
(define d 4soru=equalsimp ne demek)
(define A4 1 iki basit liste alır ve eşitliğini kontrol eder)
(define B4 2 listeleri birbirine atar)
(define C4 3 listeleri eşitler)
(define e1 5soru=append ne işe yarar)
(define A5 1 İki listeyi peş peşe ekler)
(define B5 2 iki listeyi ccedilıkarır)
(define C5 3 iki listeyi ccedilarpar)
(define f 6soru set isimlere değer atar doğrumudur)
(define A6 1 doğru)
(define B6 2 yanlis)
doğru cevap listesi
(define DListe (list 1 1 1 2 3 1) )
şıkları yazdırma
(define (Cevaplar cevapListesi)
( cond [(null cevapListesi) 0]
[else (Cevaplar (rest cevapListesi))
(display (first cevapListesi))
(display n)
]))
doğru yanlış kontroluuml
(define kon
(lambda (k FDL)
(cond ((= k FDL) (display Tebrikler )nn)(set dogrular (+ 1 dogrular)))
else ( display Maalesef olmadı (nn)(set yanlislar (+ 1 yanlislar))])))
soru ve şıkları yazdırıp cevap kontroluumlnuuml ccedilağırma
(define (Sorular soruListesi cevpListesi DListesi )
( cond [(null soruListesi) 0]
[else
(Sorular (rest soruListesi) (rest cevpListesi) (rest DListesi ))
(display (first soruListesi))
(display n)
(Cevaplar (first cevpListesi)) (set k (read)) (kon k (first DListesi)) ]))
şık listesi
(define CListe (list(list B6 A6) (list C5 B5 A5) (list C4 B4 A4) (list C3 B3 A3) (list C2 B2
A2)(list C1 B1 A1)))
Sorular fonksiyonunu ccedilağırma
(Sorular (list f e1 d c b a) CListe DListe )
yapılan doğru ve yanlış sayısını goumlsterme
(display Doğru cevap sayısı )
dogrular
(display Yanlış cevap sayısı )
yanlislar
EMEĞİ GECcedilEN BUumlTUumlN HERKESE TEŞEKUumlRLERİMİZİ SUNUYORUZhellip
( turn cate x) Mutlak değeri x in mutlak değerinden buumlyuumlk olmayan Xlsquo en
yakın değeri doumlnduumlruumlr
(round x) xe en yakın değere yuvarlıyor
İlişkisel Operatoumlrler
(=x 1) x 1 ise true doumlnduumlruumlr
(ltx y) x yden kuumlccediluumlkse true doumlnduumlruumlr
(gtx y) x y den buumlyuumlkse true doumlnduumlruumlr
(lt=x y) x yden kuku veya eĢitse true doumlnduumlruumlr
(gt=x y) x yden buumlyuumlk veya eĢitse true doumlnduumlruumlr
(eq x y) x ve y aynı ise true doumlnduumlruumlr
(equal x y) x ve y aynı yapıda olup aynı iccedileriğe sahipse true doumlnduumlruumlr
Tip Yuumlklemeleri
(procedure x)X fonksiyon ise true doumlnduumlruumlr
(null x) X boĢ bir liste ise true doumlnduumlruumlr
(zero x )X sıfır ise true doumlnduumlruumlr
(odd x) X tek ise true doumlnduumlruumlr
(even x) X tek ise true doumlnduumlruumlr
(symbolx) X tek ise true doumlnduumlruumlr
Asal Sayı Bulma Programı
(Define (divides m n)
(Cond
[(zero m) true]
[(amplt m n) false]
[else (divides (- m n) n)]
))
(Define (check-prime prime-cand divisor)
(cond
[(= 1 divisor) true]
[(divides prime-cand divisor) false]
[else (check-prime prime-cand (sub1 divisor))]))
(define (prime x)
(cond
[(= x 0) false]
[(= x 1) false]
[else (check-prime x (- x 1))]
))
KAYNAKLAR
wwwbilgisayarkavramlaricom
httpe-bergicom2010OcakScheme
httpwwwhtdporg2003ndash09ndash26Bookcurriculum-Z-H-1html
httptranslategooglecomtrtranslatehl=tramplangpair=en7Ctrampu=http httpprogramming-musingsorg20091223scheme-lectures-mostly httptranslategooglecomtrtranslatehl=trampsl=enampu=http3A2F2Fw
httpblogyollucomtagscheme
httpwwwschemecomtspl4 httpracket-langorgdownload
PROJE KONUSU SCHEME DİLİNİN OZELİKLERİNİ TAŞIYAN VE BU PDF DE
ANLATILAN KONULAR İLGİLİ 10 SORU HAZIRLANIP BUNLARIN CEVAPLARINI
KULANICIDAN İSTENİLMESİ
PROJEDE KULANILANLAR
LİSTE
FONKSİYON
KOŞUL CUumlMLESİ
DEĞER ATAMALARI
PROJE KODU
(define k 0)
(define doğrular 0)
(define yanlışlar 0)
sorular
(define a 1soru Lamda nedir)
(define A1 1 isimsiz fonksiyonları belirler)
(define B1 2 değer ataması yapar)
(define C1 3 pointer goumlrevi yapar)
(define b 2soru hangisi aritmetik fonksiyon değildir)
(define A2 1 SQRT )
(define B2 2 MIN )
(define C2 3 QUOTE )
(define c 3soru=list kulanımı nasıldır)
(define A3 (1 LIST (A) (B) (C) (D)))
(define B3 (2 LIST A B C D) )
(define C3 (3 LIST A B C D) )
(define d 4soru=equalsimp ne demek)
(define A4 1 iki basit liste alır ve eşitliğini kontrol eder)
(define B4 2 listeleri birbirine atar)
(define C4 3 listeleri eşitler)
(define e1 5soru=append ne işe yarar)
(define A5 1 İki listeyi peş peşe ekler)
(define B5 2 iki listeyi ccedilıkarır)
(define C5 3 iki listeyi ccedilarpar)
(define f 6soru set isimlere değer atar doğrumudur)
(define A6 1 doğru)
(define B6 2 yanlis)
doğru cevap listesi
(define DListe (list 1 1 1 2 3 1) )
şıkları yazdırma
(define (Cevaplar cevapListesi)
( cond [(null cevapListesi) 0]
[else (Cevaplar (rest cevapListesi))
(display (first cevapListesi))
(display n)
]))
doğru yanlış kontroluuml
(define kon
(lambda (k FDL)
(cond ((= k FDL) (display Tebrikler )nn)(set dogrular (+ 1 dogrular)))
else ( display Maalesef olmadı (nn)(set yanlislar (+ 1 yanlislar))])))
soru ve şıkları yazdırıp cevap kontroluumlnuuml ccedilağırma
(define (Sorular soruListesi cevpListesi DListesi )
( cond [(null soruListesi) 0]
[else
(Sorular (rest soruListesi) (rest cevpListesi) (rest DListesi ))
(display (first soruListesi))
(display n)
(Cevaplar (first cevpListesi)) (set k (read)) (kon k (first DListesi)) ]))
şık listesi
(define CListe (list(list B6 A6) (list C5 B5 A5) (list C4 B4 A4) (list C3 B3 A3) (list C2 B2
A2)(list C1 B1 A1)))
Sorular fonksiyonunu ccedilağırma
(Sorular (list f e1 d c b a) CListe DListe )
yapılan doğru ve yanlış sayısını goumlsterme
(display Doğru cevap sayısı )
dogrular
(display Yanlış cevap sayısı )
yanlislar
EMEĞİ GECcedilEN BUumlTUumlN HERKESE TEŞEKUumlRLERİMİZİ SUNUYORUZhellip
[else (divides (- m n) n)]
))
(Define (check-prime prime-cand divisor)
(cond
[(= 1 divisor) true]
[(divides prime-cand divisor) false]
[else (check-prime prime-cand (sub1 divisor))]))
(define (prime x)
(cond
[(= x 0) false]
[(= x 1) false]
[else (check-prime x (- x 1))]
))
KAYNAKLAR
wwwbilgisayarkavramlaricom
httpe-bergicom2010OcakScheme
httpwwwhtdporg2003ndash09ndash26Bookcurriculum-Z-H-1html
httptranslategooglecomtrtranslatehl=tramplangpair=en7Ctrampu=http httpprogramming-musingsorg20091223scheme-lectures-mostly httptranslategooglecomtrtranslatehl=trampsl=enampu=http3A2F2Fw
httpblogyollucomtagscheme
httpwwwschemecomtspl4 httpracket-langorgdownload
PROJE KONUSU SCHEME DİLİNİN OZELİKLERİNİ TAŞIYAN VE BU PDF DE
ANLATILAN KONULAR İLGİLİ 10 SORU HAZIRLANIP BUNLARIN CEVAPLARINI
KULANICIDAN İSTENİLMESİ
PROJEDE KULANILANLAR
LİSTE
FONKSİYON
KOŞUL CUumlMLESİ
DEĞER ATAMALARI
PROJE KODU
(define k 0)
(define doğrular 0)
(define yanlışlar 0)
sorular
(define a 1soru Lamda nedir)
(define A1 1 isimsiz fonksiyonları belirler)
(define B1 2 değer ataması yapar)
(define C1 3 pointer goumlrevi yapar)
(define b 2soru hangisi aritmetik fonksiyon değildir)
(define A2 1 SQRT )
(define B2 2 MIN )
(define C2 3 QUOTE )
(define c 3soru=list kulanımı nasıldır)
(define A3 (1 LIST (A) (B) (C) (D)))
(define B3 (2 LIST A B C D) )
(define C3 (3 LIST A B C D) )
(define d 4soru=equalsimp ne demek)
(define A4 1 iki basit liste alır ve eşitliğini kontrol eder)
(define B4 2 listeleri birbirine atar)
(define C4 3 listeleri eşitler)
(define e1 5soru=append ne işe yarar)
(define A5 1 İki listeyi peş peşe ekler)
(define B5 2 iki listeyi ccedilıkarır)
(define C5 3 iki listeyi ccedilarpar)
(define f 6soru set isimlere değer atar doğrumudur)
(define A6 1 doğru)
(define B6 2 yanlis)
doğru cevap listesi
(define DListe (list 1 1 1 2 3 1) )
şıkları yazdırma
(define (Cevaplar cevapListesi)
( cond [(null cevapListesi) 0]
[else (Cevaplar (rest cevapListesi))
(display (first cevapListesi))
(display n)
]))
doğru yanlış kontroluuml
(define kon
(lambda (k FDL)
(cond ((= k FDL) (display Tebrikler )nn)(set dogrular (+ 1 dogrular)))
else ( display Maalesef olmadı (nn)(set yanlislar (+ 1 yanlislar))])))
soru ve şıkları yazdırıp cevap kontroluumlnuuml ccedilağırma
(define (Sorular soruListesi cevpListesi DListesi )
( cond [(null soruListesi) 0]
[else
(Sorular (rest soruListesi) (rest cevpListesi) (rest DListesi ))
(display (first soruListesi))
(display n)
(Cevaplar (first cevpListesi)) (set k (read)) (kon k (first DListesi)) ]))
şık listesi
(define CListe (list(list B6 A6) (list C5 B5 A5) (list C4 B4 A4) (list C3 B3 A3) (list C2 B2
A2)(list C1 B1 A1)))
Sorular fonksiyonunu ccedilağırma
(Sorular (list f e1 d c b a) CListe DListe )
yapılan doğru ve yanlış sayısını goumlsterme
(display Doğru cevap sayısı )
dogrular
(display Yanlış cevap sayısı )
yanlislar
EMEĞİ GECcedilEN BUumlTUumlN HERKESE TEŞEKUumlRLERİMİZİ SUNUYORUZhellip
KAYNAKLAR
wwwbilgisayarkavramlaricom
httpe-bergicom2010OcakScheme
httpwwwhtdporg2003ndash09ndash26Bookcurriculum-Z-H-1html
httptranslategooglecomtrtranslatehl=tramplangpair=en7Ctrampu=http httpprogramming-musingsorg20091223scheme-lectures-mostly httptranslategooglecomtrtranslatehl=trampsl=enampu=http3A2F2Fw
httpblogyollucomtagscheme
httpwwwschemecomtspl4 httpracket-langorgdownload
PROJE KONUSU SCHEME DİLİNİN OZELİKLERİNİ TAŞIYAN VE BU PDF DE
ANLATILAN KONULAR İLGİLİ 10 SORU HAZIRLANIP BUNLARIN CEVAPLARINI
KULANICIDAN İSTENİLMESİ
PROJEDE KULANILANLAR
LİSTE
FONKSİYON
KOŞUL CUumlMLESİ
DEĞER ATAMALARI
PROJE KODU
(define k 0)
(define doğrular 0)
(define yanlışlar 0)
sorular
(define a 1soru Lamda nedir)
(define A1 1 isimsiz fonksiyonları belirler)
(define B1 2 değer ataması yapar)
(define C1 3 pointer goumlrevi yapar)
(define b 2soru hangisi aritmetik fonksiyon değildir)
(define A2 1 SQRT )
(define B2 2 MIN )
(define C2 3 QUOTE )
(define c 3soru=list kulanımı nasıldır)
(define A3 (1 LIST (A) (B) (C) (D)))
(define B3 (2 LIST A B C D) )
(define C3 (3 LIST A B C D) )
(define d 4soru=equalsimp ne demek)
(define A4 1 iki basit liste alır ve eşitliğini kontrol eder)
(define B4 2 listeleri birbirine atar)
(define C4 3 listeleri eşitler)
(define e1 5soru=append ne işe yarar)
(define A5 1 İki listeyi peş peşe ekler)
(define B5 2 iki listeyi ccedilıkarır)
(define C5 3 iki listeyi ccedilarpar)
(define f 6soru set isimlere değer atar doğrumudur)
(define A6 1 doğru)
(define B6 2 yanlis)
doğru cevap listesi
(define DListe (list 1 1 1 2 3 1) )
şıkları yazdırma
(define (Cevaplar cevapListesi)
( cond [(null cevapListesi) 0]
[else (Cevaplar (rest cevapListesi))
(display (first cevapListesi))
(display n)
]))
doğru yanlış kontroluuml
(define kon
(lambda (k FDL)
(cond ((= k FDL) (display Tebrikler )nn)(set dogrular (+ 1 dogrular)))
else ( display Maalesef olmadı (nn)(set yanlislar (+ 1 yanlislar))])))
soru ve şıkları yazdırıp cevap kontroluumlnuuml ccedilağırma
(define (Sorular soruListesi cevpListesi DListesi )
( cond [(null soruListesi) 0]
[else
(Sorular (rest soruListesi) (rest cevpListesi) (rest DListesi ))
(display (first soruListesi))
(display n)
(Cevaplar (first cevpListesi)) (set k (read)) (kon k (first DListesi)) ]))
şık listesi
(define CListe (list(list B6 A6) (list C5 B5 A5) (list C4 B4 A4) (list C3 B3 A3) (list C2 B2
A2)(list C1 B1 A1)))
Sorular fonksiyonunu ccedilağırma
(Sorular (list f e1 d c b a) CListe DListe )
yapılan doğru ve yanlış sayısını goumlsterme
(display Doğru cevap sayısı )
dogrular
(display Yanlış cevap sayısı )
yanlislar
EMEĞİ GECcedilEN BUumlTUumlN HERKESE TEŞEKUumlRLERİMİZİ SUNUYORUZhellip
PROJE KONUSU SCHEME DİLİNİN OZELİKLERİNİ TAŞIYAN VE BU PDF DE
ANLATILAN KONULAR İLGİLİ 10 SORU HAZIRLANIP BUNLARIN CEVAPLARINI
KULANICIDAN İSTENİLMESİ
PROJEDE KULANILANLAR
LİSTE
FONKSİYON
KOŞUL CUumlMLESİ
DEĞER ATAMALARI
PROJE KODU
(define k 0)
(define doğrular 0)
(define yanlışlar 0)
sorular
(define a 1soru Lamda nedir)
(define A1 1 isimsiz fonksiyonları belirler)
(define B1 2 değer ataması yapar)
(define C1 3 pointer goumlrevi yapar)
(define b 2soru hangisi aritmetik fonksiyon değildir)
(define A2 1 SQRT )
(define B2 2 MIN )
(define C2 3 QUOTE )
(define c 3soru=list kulanımı nasıldır)
(define A3 (1 LIST (A) (B) (C) (D)))
(define B3 (2 LIST A B C D) )
(define C3 (3 LIST A B C D) )
(define d 4soru=equalsimp ne demek)
(define A4 1 iki basit liste alır ve eşitliğini kontrol eder)
(define B4 2 listeleri birbirine atar)
(define C4 3 listeleri eşitler)
(define e1 5soru=append ne işe yarar)
(define A5 1 İki listeyi peş peşe ekler)
(define B5 2 iki listeyi ccedilıkarır)
(define C5 3 iki listeyi ccedilarpar)
(define f 6soru set isimlere değer atar doğrumudur)
(define A6 1 doğru)
(define B6 2 yanlis)
doğru cevap listesi
(define DListe (list 1 1 1 2 3 1) )
şıkları yazdırma
(define (Cevaplar cevapListesi)
( cond [(null cevapListesi) 0]
[else (Cevaplar (rest cevapListesi))
(display (first cevapListesi))
(display n)
]))
doğru yanlış kontroluuml
(define kon
(lambda (k FDL)
(cond ((= k FDL) (display Tebrikler )nn)(set dogrular (+ 1 dogrular)))
else ( display Maalesef olmadı (nn)(set yanlislar (+ 1 yanlislar))])))
soru ve şıkları yazdırıp cevap kontroluumlnuuml ccedilağırma
(define (Sorular soruListesi cevpListesi DListesi )
( cond [(null soruListesi) 0]
[else
(Sorular (rest soruListesi) (rest cevpListesi) (rest DListesi ))
(display (first soruListesi))
(display n)
(Cevaplar (first cevpListesi)) (set k (read)) (kon k (first DListesi)) ]))
şık listesi
(define CListe (list(list B6 A6) (list C5 B5 A5) (list C4 B4 A4) (list C3 B3 A3) (list C2 B2
A2)(list C1 B1 A1)))
Sorular fonksiyonunu ccedilağırma
(Sorular (list f e1 d c b a) CListe DListe )
yapılan doğru ve yanlış sayısını goumlsterme
(display Doğru cevap sayısı )
dogrular
(display Yanlış cevap sayısı )
yanlislar
EMEĞİ GECcedilEN BUumlTUumlN HERKESE TEŞEKUumlRLERİMİZİ SUNUYORUZhellip
(define B3 (2 LIST A B C D) )
(define C3 (3 LIST A B C D) )
(define d 4soru=equalsimp ne demek)
(define A4 1 iki basit liste alır ve eşitliğini kontrol eder)
(define B4 2 listeleri birbirine atar)
(define C4 3 listeleri eşitler)
(define e1 5soru=append ne işe yarar)
(define A5 1 İki listeyi peş peşe ekler)
(define B5 2 iki listeyi ccedilıkarır)
(define C5 3 iki listeyi ccedilarpar)
(define f 6soru set isimlere değer atar doğrumudur)
(define A6 1 doğru)
(define B6 2 yanlis)
doğru cevap listesi
(define DListe (list 1 1 1 2 3 1) )
şıkları yazdırma
(define (Cevaplar cevapListesi)
( cond [(null cevapListesi) 0]
[else (Cevaplar (rest cevapListesi))
(display (first cevapListesi))
(display n)
]))
doğru yanlış kontroluuml
(define kon
(lambda (k FDL)
(cond ((= k FDL) (display Tebrikler )nn)(set dogrular (+ 1 dogrular)))
else ( display Maalesef olmadı (nn)(set yanlislar (+ 1 yanlislar))])))
soru ve şıkları yazdırıp cevap kontroluumlnuuml ccedilağırma
(define (Sorular soruListesi cevpListesi DListesi )
( cond [(null soruListesi) 0]
[else
(Sorular (rest soruListesi) (rest cevpListesi) (rest DListesi ))
(display (first soruListesi))
(display n)
(Cevaplar (first cevpListesi)) (set k (read)) (kon k (first DListesi)) ]))
şık listesi
(define CListe (list(list B6 A6) (list C5 B5 A5) (list C4 B4 A4) (list C3 B3 A3) (list C2 B2
A2)(list C1 B1 A1)))
Sorular fonksiyonunu ccedilağırma
(Sorular (list f e1 d c b a) CListe DListe )
yapılan doğru ve yanlış sayısını goumlsterme
(display Doğru cevap sayısı )
dogrular
(display Yanlış cevap sayısı )
yanlislar
EMEĞİ GECcedilEN BUumlTUumlN HERKESE TEŞEKUumlRLERİMİZİ SUNUYORUZhellip
doğru yanlış kontroluuml
(define kon
(lambda (k FDL)
(cond ((= k FDL) (display Tebrikler )nn)(set dogrular (+ 1 dogrular)))
else ( display Maalesef olmadı (nn)(set yanlislar (+ 1 yanlislar))])))
soru ve şıkları yazdırıp cevap kontroluumlnuuml ccedilağırma
(define (Sorular soruListesi cevpListesi DListesi )
( cond [(null soruListesi) 0]
[else
(Sorular (rest soruListesi) (rest cevpListesi) (rest DListesi ))
(display (first soruListesi))
(display n)
(Cevaplar (first cevpListesi)) (set k (read)) (kon k (first DListesi)) ]))
şık listesi
(define CListe (list(list B6 A6) (list C5 B5 A5) (list C4 B4 A4) (list C3 B3 A3) (list C2 B2
A2)(list C1 B1 A1)))
Sorular fonksiyonunu ccedilağırma
(Sorular (list f e1 d c b a) CListe DListe )
yapılan doğru ve yanlış sayısını goumlsterme
(display Doğru cevap sayısı )
dogrular
(display Yanlış cevap sayısı )
yanlislar
EMEĞİ GECcedilEN BUumlTUumlN HERKESE TEŞEKUumlRLERİMİZİ SUNUYORUZhellip
(display Doğru cevap sayısı )
dogrular
(display Yanlış cevap sayısı )
yanlislar
EMEĞİ GECcedilEN BUumlTUumlN HERKESE TEŞEKUumlRLERİMİZİ SUNUYORUZhellip