Online Scheme yorumlayıcı nasıl kullanılır?
- Düzenleyiciye Scheme kodu yazın veya yapıştırın. Örneği sıfırla, bir faktöriyel, ilk on Fibonacci sayısı ve bir kareler toplamı yazdıran başlangıç programını geri getirir.
- Çalıştır'a basın ya da Ctrl + Enter (Mac'te ⌘ + Enter) kısayolunu kullanın.
display,writevenewlineile yazılan metin Çıktı panelinde görünür. Program bittiğinde, değer belirsiz değilse son ifadenin değeri=> değerolarak yazdırılır. Hatalar BiwaScheme'in kendi mesajıyla bildirilir.- Süre sınırı olarak 5, 15 veya 60 saniye seçin. Sonsuz döngü otomatik olarak durdurulur; Durdur ise çalışmayı hemen sonlandırır.
Yorumlayıcı yalnızca yaklaşık 0,3 MB olduğundan sayfa neredeyse anında hazır olur. Kopyala ve main.scm programınızı kaydeder; Tam ekran (Ctrl/⌘ + Shift + F, çıkmak için Esc) düzenleyiciye pencerenin tamamını verir.
Kodunuz tarayıcınızdaki bir Web Worker içinde çalışır ve hiçbir zaman bir sunucuya gönderilmez. Düzenleyici, son programınızı tarayıcınızın yerel depolama alanına otomatik kaydeder; bu kayıt sitedeki her derleyici için ayrıdır.
Scheme ve BiwaScheme hakkında
Scheme, Lisp'in küçük bir lehçesidir. Programlar parantezli ifadelerden oluşur, fonksiyonlar sıradan değerlerdir ve döngü kurmanın olağan yolu özyinelemedir (recursion). Küçük çekirdeği, onu closure'ları, yüksek dereceli fonksiyonları ve yorumlayıcıları öğretmek için sevilen bir dil yapar.
Bu sayfa, JavaScript ile yazılmış bir Scheme yorumlayıcısı olan BiwaScheme 0.8.3'ü çalıştırır. Üslup olarak R6RS ve R7RS standartlarını izler ve en yaygın Scheme özelliklerini kapsar. Yine de bu standartlardan hiçbirinin eksiksiz bir uygulaması değildir.
Neler destekleniyor?
- Çekirdek biçimler:
define,lambda,let,let*,letrec,if,cond,beginveset!. - Listeler ve yüksek dereceli fonksiyonlar:
cons,car,cdr,list,map,applyve'(1 2 3)gibi alıntılanmış veriler. - Doğru kuyruk çağrıları (proper tail calls); böylece adlandırılmış
letveya kuyruk özyinelemeli fonksiyonlar olarak yazılan döngüler sabit yığın alanında çalışır.
Sınırlamalar:
- Girdi kutusu yok. Test verisini doğrudan programa koyun.
- Tam bir standart uygulaması değil. MIT Scheme, Racket veya Guile gibi diğer Scheme'lere özgü prosedürler eksik olabilir.
- Yalnızca düzenleyicideki kod çalışır. Yüklenecek dosya ve paket yöneticisi yoktur.
Örnek: özyineleme ve adlandırılmış let
;; Düz özyineleme: her çağrı bir sonrakinin dönmesini bekler.
(define (sum-list lst)
(if (null? lst)
0
(+ (car lst) (sum-list (cdr lst)))))
;; Adlandırılmış let: birikimli (akümülatörlü) kuyruk özyinelemeli bir döngü.
(define (sum-to n)
(let loop ((i 1) (acc 0))
(if (> i n)
acc
(loop (+ i 1) (+ acc i)))))
(display (sum-list '(1 2 3 4))) (newline) ; 10
(sum-to 100000) ; => 5000050000
Son ifade yazdırılmadığı için değeri => 5000050000 olarak görünür. sum-list bekleyen toplamlar biriktirir; sum-to ise loop'u kuyruk konumunda çağırır ve bir while döngüsü gibi davranır.
Sık yapılan hatalar
- Listeyi alıntılamayı (quote) unutmak.
(1 2 3),1'i fonksiyon olarak çağırmaya çalışır ve başarısız olur.'(1 2 3)ya da(list 1 2 3)yazın. İkisi farklıdır:'(a b),avebsembollerinin listesidir;(list a b)ise değişkenleri değerlendirir. defineveletfarkı. Üst düzey birdefinegenel bir ad oluşturur.letise yalnızca gövdesinin içinde var olan yerel adlar oluşturur. Düz birletiçinde bir bağlama diğerine başvuramaz; sonraki bir değer öncekine bağlıysalet*kullanın.displayvewritefarkı.displaydizeleri tırnaksız yazdırır.writetırnakları korur; bu, veriyi hata ayıklarken işe yarar.- Eşitlik. Sayılar için
=, semboller içineq?, listeleri ya da dizeleri içeriğe göre karşılaştırmak içinequal?kullanın.
Sıkça sorulan sorular
Bu bir Scheme derleyicisi mi, yorumlayıcısı mı?
Yorumlayıcı. BiwaScheme, programınızı ayrı bir derleme adımı olmadan doğrudan tarayıcıda çalıştırır.
Hangi Scheme standardı destekleniyor?
BiwaScheme üslup olarak R6RS ve R7RS'yi izler ve en yaygın özellikleri kapsar. define, lambda, let, cond, listeler ve özyineleme kullanan standart ders kitabı kodları beklendiği gibi çalışır. Tek bir uygulamanın kütüphanelerine bağlı kodun değiştirilmesi gerekebilir.
SICP veya ders alıştırmaları için kullanabilir miyim?
Evet, çekirdek Scheme üzerine kurulu alıştırmalar için. Bir alıştırma tanımsız bir prosedür kullanıyorsa, programın başına onun küçük bir sürümünü kendiniz yazın.
Programım neden hiçbir şey yazdırmıyor?
Yalnızca display, write ve newline çıktı üretir; bir de son ifadenin değeri için => satırı. Bir define ile biten program değer göstermez, çünkü o sonuç belirsizdir.
Online olarak başka hangi dilleri çalıştırabilirim?
Başka bir Lisp için Online Clojure Derleyici'yi, mantık programlama için Online Prolog Derleyici'yi deneyin ya da tüm online derleyicilere göz atın.
Güncellendi