Yapay zeka kullanılarak Scheme'dan kaynaktan kaynağa kod çevirisi, kaynak kodunu analiz etmek ve anlamak için doğal dil işleme (NLP) tekniklerinden ve makine öğrenimi algoritmalarından yararlanmayı içerir
Zorluk Açıklaması | Scheme Söz Dizimi Örneği | Crystal Söz Dizimi Örneği | Puan (1-10) |
---|---|---|---|
Birinci Sınıf Fonksiyonlar | (define (square x) (* x x)) |
def square(x : Int) : Int { x * x } |
6 |
Makrolar ve Kod Üretimi | (define-syntax (when stx) ...) |
# Crystal'de makro uygulaması |
8 |
Kuyruk Çağrısı Optimizasyonu | (define (factorial n acc) ...) |
def factorial(n : Int, acc : Int) : Int |
7 |
Dinamik Tipleme vs. Statik Tipleme | (define x 10) |
x = 10 |
5 |
Devamlar | (call/cc (lambda (k) ...)) |
# Devamlar desteklenmiyor |
9 |
Liste Manipülasyonu | (map (lambda (x) (* x 2)) '(1 2 3)) |
array.map { |x| x * 2 } |
4 |
Desen Eşleştirme | (match x ((1) "one") ((2) "two")) |
case x when 1 then "one" when 2 then "two" |
3 |
Değişken ve Değişmez Veri Yapıları | (set! my-list (cons 1 my-list)) |
my_list.push(1) |
5 |
Scheme'de, fonksiyonlar birinci sınıf vatandaşlardır, yani argüman olarak geçirilebilir, diğer fonksiyonlardan döndürülebilir ve değişkenlere atanabilir.
Scheme Örneği:
(define (square x) (* x x))
Crystal Örneği:
def square(x : Int) : Int
x * x
end
Referans: Crystal Dil Dokümantasyonu - Metotlar
Scheme'nin makro sistemi, derleme zamanında güçlü kod üretimi ve manipülasyonu sağlar, bu özellik Crystal'de doğrudan mevcut değildir.
Scheme Örneği:
(define-syntax (when stx)
...)
Crystal Örneği:
## Crystal'de makro uygulaması
Referans: Crystal Dil Dokümantasyonu - Makrolar
Scheme kuyruk çağrısı optimizasyonunu destekler, bu da özyinelemeli fonksiyonların sabit yığın alanında çalışmasına olanak tanır.
Scheme Örneği:
(define (factorial n acc)
(if (= n 0)
acc
(factorial (- n 1) (* n acc))))
Crystal Örneği:
def factorial(n : Int, acc : Int) : Int
if n == 0
acc
else
factorial(n - 1, n * acc)
end
end
Referans: Crystal Dil Dokümantasyonu - Özyineleme
Scheme dinamik olarak tiplenirken, Crystal statik olarak tiplenmiştir, bu da değişken tanımlamalarında zorluklara yol açabilir.
Scheme Örneği:
(define x 10)
Crystal Örneği:
x = 10
Referans: Crystal Dil Dokümantasyonu - Tipler
Scheme devamları destekler, bu da mevcut yürütme durumunu yakalamaya olanak tanırken, Crystal bu özelliği yerleşik olarak desteklemez.
Scheme Örneği:
(call/cc (lambda (k) ...))
Crystal Örneği:
## Devamlar desteklenmiyor
Referans: Scheme Devamlar
Her iki dil de liste manipülasyonunu destekler, ancak sözdizimi ve mevcut fonksiyonlar farklılık gösterir.
Scheme Örneği:
(map (lambda (x) (* x 2)) '(1 2 3))
Crystal Örneği:
array.map { |x| x * 2 }
Referans: Crystal Dil Dokümantasyonu - Diziler
Scheme desen eşleştirme için match
kullanırken, Crystal case
kullanır.
Scheme Örneği:
(match x ((1) "one") ((2) "two"))
Crystal Örneği:
case x
when 1 then "one"
when 2 then "two"
end
Referans: Crystal Dil Dokümantasyonu - Case
Scheme'nin değişken ve değişmez veri yapıları yaklaşımı, Crystal'nin daha belirgin bir ayrımı ile farklılık gösterebilir.
Scheme Örneği:
(set! my-list (cons 1 my-list))
Crystal Örneği:
my_list.push(1)