scheme etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
scheme etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

9 Haziran 2007 Cumartesi

scheme eskizlerine devam.

Teach Yourself Scheme in Fixnum Days

kaynağına bakıyorum ordan da bazı karalamalar.

ilk iş merhaba dünya olayına girişmişler=)


;ilk program
(begin
(display "Merhaba, Dünya!")
(newline))

noktalı virgül yorumdur.





Boolean cebir elemanları 1 = #t (true dan), 0= #f (false dan) olarak tanımlanmıştır.

not boolean tersi işlemidir. sıfırsa bir birse sıfıra çevirir.

(not #f)              =>  #t
(
not #t) => #f
(
not "Hello, World!") => #f

boolean? boolean cebiri için tanımlanmış ifade olup olmadığına bakar.

(boolean? #t)              =>  #t
(
boolean? "Hello, World!") => #f

scheme de number kavramı (sayı) bütün tam sayıları (integers), rasyonel sayıları (rationals),
reel (reals) ve karmaşık (complex) sayıları kapsar. bir verinin sayı olup olmadığı number?
sorgusu ile yapılır. diğer veri yapısı sorguları da aşağıdaki gibidir.

(
number? 42) => #t
(
number? #t) => #f


(complex? 2+3i) => #t

(
real? 2+3i) => #f
(
real? 3.1416) => #t
(
real? 22/7) => #t
(
real? 42) => #t

(
rational? 2+3i) => #f
(
rational? 3.1416) => #t
(
rational? 22/7) => #t

(
integer? 22/7) => #f
(
integer? 42) => #t


#b ikili sistemi temsil eder. #b1100 yazdığımızda onluk sisteme dönüştürülür (12).
#o sekizlik, #x ise 16lık hex sistemini temsil eder.

eqv? eşit olup olmadığını test eder.

(eqv? 13 13)
(eqv? 13 #t)
(eqv? 13 #f)
(eqv? 13 13.0)

ayrıca sayılar için = de kullanılır
.

(= 42 42)   =>  #t
(
= 42 #f) -->ERROR!!!
(
= 42 42.0) => #t



(< 3 2) => #f
(
>= 4.5 3) => #t
büyüklük küçüklük ve büyük eşitlik gibi ifadeler normal matematikteki
gibidir.

(< 3 2)    =>  #f
(
>= 4.5 3) => #t

üssünü almak expt ile olur.

(expt 2 3) => 8
(
expt 4 1/2) => 2.0

ilk ifade yoksa - de ilk ifade sıfırmış gibi / de de 1 miş gibi
davranır.

(- 4) => -4
(
/ 4) => 1/4
maksimum ve minumum değerleri bulmak için max ve min
kullanılır.

(max 1 3 4 2 3) =>  4
(
min 1 3 4 2 3) => 1


karakterler /# ön ekiyle tanımlanırlar. #\c , c karakteridir. #\newline ,
#\tab gibi kullanılabilirler. space tuşu #\ veya #\space şeklinde gösterilebilir.

Bir verinin karakter olup olmadığı char? ile sorgulanabilir.

(char? #\c) =>  #t
(char? 1)
=> #f
(char? #\;)
=> #t

karakterlerin karşılaştırılması da
char=?, char, char<=?, char>?,
char>=? şekillerinde yapılabilir.

(char=? #\a #\a)  =>  #t
(char #\a #\b) => #t
(char>=? #\a #\b) => #f

karakterleri büyüklük küçüklük hassasiyeti olmadan karşılaştırma yapmak
için char-ci kullanılır.

(char-ci=? #\a #\A) => #t
(char-ci #\a #\B) => #t

küçük harflerin büyük harflere dönüştürülmesi char-upcase, büyüklerin de küçük
harflere dönüştürülmesi char-downcase komutları ile yapılır.

(char-downcase #\A) => #\a
(char-upcase #\a) => #\A

Semboller değişken tanımlamakta kullanılırlar. sembolleri belirtmek için
quote veya ' kullanılır. (buraları ben de pek anlamadım.)

(quote xyz)
=> xyz

'E

(quote E)

sorgulaması symbol? ile yapılır.

(symbol? 'xyz) => #t
(symbol? 42) => #f


Shceme de sembollerin büyük küçük duyarlılığı yoktur.


(eqv? 'Calorie 'calorie)
=> #t
define ile global değişken ataması yapabiliriz.

(define xyz 5)

xyz
=>  5

set! ile değişkenin değerini değiştirebiliriz.

(set! xyz #\c)

xyz
=> #\c

string harfleri birleştirmeyi sağlar.

(string #\M #\e #\r #\h #\a #\b #\a)
=>"Merhaba"

string-ref ise istenen sıradaki harfi verir.

(define aa "Merhaba ; Merhaba!")

(string-ref aa 9)
=>#\space

(string-ref aa 0)
=>#\M

(string-ref aa 1)
=>#\e
string-append ile ekleme yapabiliriz

string-append aa " mrb." " slm.")
=>"Merhaba ; Merhaba! mrb. slm."

define ve string i birlikte kullanarak da tanımlama yapabiliriz.

(define mrb (string #\M #\e #\r #\h #\a #\b #\a))
mrb
=>"Merhaba"

string-set! ile dizideki karakterlerden istediğimizi değiştirebiliriz.

(string-set! mrb 1 #\i)
mrb
=>"Mirhaba"


matematik dünyasında sonsuz listelerle ilgili bir makale
bir makale buldum.




6 Haziran 2007 Çarşamba

scheme karalamalar


sicp kitabı ile schemeyi kurcalıyorum bakalım noolcak =)

MIT nin GNU schemesini kullanamadım (run emacsdakinden farklıydı bulamadım) onun yerine DrScheme kullanıyorum. dosyalar .scm olarak kaydediliyor. Dili içgüdüsel olarak standart seçtim (Language: Standard (R5RS).)

linuxda açmak için badis@badis-laptop:~$ drscheme yazmanız yeterlidir.
kaydettiğiniz betiği de badis@badis-laptop:~$ drscheme betikadi.scm şeklinde geri çağırıp üstünde çalışabilirsiniz.


(+ 333 234)
567
(* 12 5 4)
240
(- 11 3 )
8
(+ (* 4 5) (- 4 6))
18
(+(* 3(+ (* 2 4) (+ 3 5))) (+ (- 10 7) 6))
57

(- 4 5 6 7)
-14

en son yaptığımız çıkarmada ilk elemandan diğer üçünü çıkarmaktadır. schemede common lisp deki gibi önce komut ardından listenin elemanları geliyor.


tanımlamaları define ile yaparız.

(define boy 20)
boy
(* 5 boy)


(define pi 3.141592654)
(define yaricap 5)
(define cevre (* 2 pi yaricap))
cevre
(define alan (* pi yaricap yaricap))
alan



(* (+ 2 (* 4 6))
(+ 3 5 7))

bu işlemin ağacına bakalım: 3,5,7 bir dallanma 4,6 ayrı ancak 2 ile birleşiyor. aşağıda agacı mevcuttur kitaptan copy paste edilmiştir.
(kendime not okulun sitesinde bulduğum ağaç slaytlarına çalış devre teorisinde gördüğün graflar yetmeyecektir, teorini güçlendir!)



bana muhteşem gelen bir şey okudum az önce. fonksiyonu anında tanımlıyoruz ve anında kullanabiliyoruz. çok güzel bir özellik bence.

temel yapısı:

(define (fonksiyon-adı paramatre1 par2..) (işlem par1 par2..))


(define (kare x) (* x x))
(kare 7)
(kare (+ 4 5))
(kare (kare 4))
(define (kareler-toplamı x y)(+ (kare x) (kare y)))
(kareler-toplamı 6 8)
(define (f z)
(kareler-toplamı (* z z) (* z 4)))
(f 5)


DrScheme'nin güzel bir özelliği de imleç paranteze geldiğinde parantezin bitimine dek renklendirmesi böylece hata yapmamı önlüyor. Dallanmanın nasıl olduğunu kolayca anlamamı sağlıyor.
 
eXTReMe Tracker