Çıkmaz Demeyin Şansınızı Deneyin

Bu girdi Burdaki girdiden esinlenilerek yazıldı.

E madem pyton ile sayısal kuponu yapılıyor biz niye scheme ile yapmayalım bunu demi:)
Probleme göre kod bana çok uzun geldi. Belki ilerde optimize edebilirim. Ama şimdilik böyle oynayalım demi:)

(define (sayisal)
  (display "Oynamak istediginiz kolan sayisini giriniz: \n")
  (let ((kolon (read)))
    (do ((i 1 (+ i 1))) ((> i kolon))
      (let loop ((lst (list (+ (random 49) 1))) 
                   (sayi (+ 1 (random 49))))
        (if (= (length lst) 6)
            (printf "~a. kolon: ~a\n" i (sort lst < ))
            (if (member sayi lst)
                (loop lst (+ (random 49) 1))
                (loop (append lst (list sayi)) 
                       (+ (random 49) 1))))))))
(sayisal);burası kodun çalıştırılması için. 
;aslında define kısmı çıkartılarak buna gerek kalmamayabilir
;ama  ilerde belki başka birşey içinde kullanırım:)

DrScheme v372 Çıktı

DrScheme Logo DrScheme v372 çıktı. Bu versiyonunda birçok hatanın düzeltildiği ve birkaç yeni özellik eklendiği belirtiliyor. Sanırım beni ençok etkileyen özellik kod tamamlama özelliği. Siz bir kod yazarken o size ekleyebileceğiniz konutları sıralıyor. Ancak bu özellik çok kullanışlı bir halde gelmiyor. Tamamlama istediğimiz zaman [ Ctrl / ] tuş kombinasyonunu kullanmamız gerekmekte. Bende [ Ctrl Shift 7 ] kombinasyonunun kullanılması gerekiyor.
Kod tamamlama
Ayrıca burdan indirebilirsiniz.


Alın size bir güzel kod:)

Alın size bir güzel kod:) Benim hoşuma gitti eminim sizin hoşunuzada gidecek.

(define (goster str)
  (let loop ((str str))
    (if (equal? str "")
        (begin
          (sleep 0)
          (display ""))
        (begin
          (sleep 1/2)
          (display (string-ref str 0))
          (loop (substring str 1))))))

Scheme ile ekrana içi boş dikdörtgen bastırmak

(define (kare x y)
  (do ((i 0 (+ i 1))) ((= i x))
    (newline)
    (do ((j 0 (+ j 1))) ((= j y))
      (if (or (= i 0) (= i (- x 1)))
          (display "*")
          (if (or (= j 0) (= j (- y 1)))
              (display "*")
              (display " "))))))

bu kod aşağıdaki gibi bir şekil oluşruracak

**********
*        *
*        *
*        *
*        *
*        *
*        *
*        *
*        *
**********

Ancak bu şekil pek hoş değil. Eğer display’in içini biraz düzenlersek çok dahahoş şekilerle karşılaşırız.

(define (kare x y)
  (do ((i 0 (+ i 1))) ((= i x))
    (newline)
    (do ((j 0 (+ j 1))) ((= j y))
      (if (or (= i 0) (= i (- x 1)))
          (display "* ")
          (if (or (= j 0) (= j (- y 1)))
              (display "* ")
              (display "  "))))))

Bu kod

* * * * * * * * * * 
*                 * 
*                 * 
*                 * 
*                 * 
*                 * 
*                 * 
*                 * 
*                 * 
* * * * * * * * * *

şeklini oluşturacaktır. Tabiki etkileşim penceresinde şekil daha düzgün çıkacaktır.


Sezar şifreleme

Sezar şifreleme için yazdığım ilk kod aşağıdaki gibiydi

(define str2 "")
(define (sezar str lst)
  (do ((i 0 (+ i 1)) (j 0 (+ j 1))) ((= j (string-length str)))
    (if (= i (length lst))
        (set! i 0))
    (set! str2 
          (string-append
           str2
           (string (integer->char
                    (+ (list-ref lst i )
                       (char->integer (string-ref str j)))))))))

Ancak bu kod pek hoşuma gitmedi üzerinde biraz daha oynama yapmak gerekiyordu. Mesela en baştaki

(define str2 "")

pek hoş durmuyordu ve hiç bir sonuç gönmüyordu. Ekstradan srt2 nin değerini sorgulamak gerekiyordu.


Same oyunu

Merhaba arkadaşlarımın isteği üzerine ödev olarak verilmiş olan same oyununun kendi yazdığım scheme kodlarını internete koydum. Olaki bigün sizden de scheme ile same oyunu yazmanızı isterlerse bu kodlardan faydalanabilirsiniz.

same.scm


En basit recursion - özyineleme mantığı

Benin algılamakta en zorluk çektiğim kavramdı. Ancak öğrenince çok çok işe yarıyor.

(define
  (lst-length lst)
  (if (null? lst)
      0
      (+ 1 (lst-length (cdr lst)))))

Kodu tanımlayacak olursak (null? lst) lst değişkeninde tuttuğumuz listenin boş olup olmadığını kontrol ediyor. Boş listenin eleman sayısının 0 olduğunu biliyoruz. Listemiz genelde ilk halinde boş olmayacağı için if condition direk #f verip 2. satıra geçecek. özyinelemenin can damarı aslında burda. Biz 1 eksik elemanlı listenin eleman sayısıyla 1i topluyoruz. Sonra tekrar 1 eksik elemanlı listenin 1 elemanını daha çıkartıp, o listenin eleman sayısıyla topluyoruz. Taki (null? lst) #t olana kadar. Ozamanda zaten fonkiyon 0 verecek ve tüm o 1leri toplayacak. size tavsiyem bu konu hakkında çok düşüünün elinizde olan örnekleri tekrar tekrar uygulayın.


Scheme hakkında birkaç kitap

Madem tekrardan scheme öğrenmeye başladım o konu hakkında braz yazı yazalım değilmi. İşe bir kitap ile başlayalım.

Öncelikle scheme kitaplarıyla başlasak mantıklı olacak gibi geliyor.scheme hakkında birçok kitap bulunabilir fakat ben aramada ilk karşıma çıkan seçenekleri burda vereceğim biraz google güvenilir gibi geldi bu konuda.

How to Design Programs // Dr scheme projesiyle birlikte yürüyen bir kitap bu açıdan en sağlam kaynaklardan biri olduğu görüşündeyim. Sitesi aşağıda. Site üzerinden e-book olarak kitaba ulaşabilirsiniz.
http://www.htdp.org

The Scheme Programming Language // Scheme için kullandığım tek kaynaktı. Ancak tek kaynak hiç bir şekilde yetmiyor.
Aynı şekilde site üzerinden bu kitabada ulaşabilirsiniz.
http://www.scheme.com/tspl3/

Teach Yourself Scheme in Fixnum days // Yeni başlayanlar için iyi bir başlangıç olacağını düşünüyorum
http://www.ccs.neu.edu/home/dorai/t-y-scheme/t-y-scheme.html

Ayrıca
Buradan ve buradan scheme hakkındaki kitapları sıkıtırılmış haliyle indirebilirsiniz

Kitapları bitirdik sıra geldi internet sitelerine

Dr.Scheme Ortamını indirebileceğimiz ve onunla ilgili hatta scheme ile ilgili çeşitli kaynaklara ulaşabileceğimiz bir site.
http://www.drscheme.org

Son olarakta schemers
Scheme programlama dili hakkında son haberleri, kütüphaneleri vs. bulabileceğiniz bir site.
http://www.schemers.org/