Scheme
Főnév
Scheme (tsz. Schemes)
- (informatika) Scheme egy funkcionális és minimalista dialektusa a Lisp programozási nyelvnek. 1975-ben fejlesztette ki Guy L. Steele és Gerald Jay Sussman az MIT-n. 👉 Céljuk az volt, hogy a Lisp nyelvhez képest egy letisztultabb, egységesebb nyelvet hozzanak létre, ami könnyen tanítható és elméletileg is tiszta.
🌟 Fő jellemzők
✅ Funkcionális nyelv → preferálja az immutable adatokat ✅ Egyszerű, letisztult szintaxis ✅ Lexikális scope → hatókör szabályos, átlátható ✅ Tail recursion optimalizáció → rekurzió hatékonyan használható ✅ Elsőrendű függvények → függvények is adatok, átadhatók, visszaadhatók ✅ Makrók → kód generálható kódból ✅ Homoikónia → a kód is adatszerkezet (s-expressions) ✅ Minimalista standard → néhány mag-konstrukcióból sok minden felépíthető ✅ Continuations támogatása → call/cc (call with current continuation)
🏗 Mire használják?
- Oktatás → sok programozási alaptankönyv (pl. Structure and Interpretation of Computer Programs, SICP) Scheme-et használ
- Algoritmusok oktatása
- Compiler kutatás
- AI / logikai programozás
- Scriptelés, prototípus készítés
📝 Egyszerű Scheme példa
(define (square x)
(* x x))
(display (square 5))
(newline)
👉 Kimenet: 25
Magyarázat:
(define (square x) (* x x))→ függvény definiálásadisplay→ kiírás(newline)→ új sor kiírása
🔑 Alap nyelvi elemek
✅ define → változó vagy függvény definiálása ✅ lambda → névtelen függvény ✅ if / cond → elágazás ✅ **let / let* / letrec** → lokális változók ✅ begin → több utasítás csoportosítása ✅ quote / quasiquote → adatszerkezet létrehozás kódként
📚 Példa: Faktoriális rekurzívan
(define (factorial n)
(if (<= n 1)
1
(* n (factorial (- n 1)))))
👉 (factorial 5) → 120
📚 Lambda példa (magasabb rendű függvények)
(define square (lambda (x) (* x x)))
(display (square 6))
👉 (lambda (x) (* x x)) → névtelen függvény
📚 Listakezelés példa
(define mylist '(1 2 3 4 5))
(car mylist) ; első elem → 1
(cdr mylist) ; többi elem → (2 3 4 5)
(cons 0 mylist); új lista: (0 1 2 3 4 5)
👉 Lista = alapelem Scheme-ben, mint minden Lisp nyelvben.
🚀 Scheme vs Common Lisp vs Clojure
| Jellemző | Scheme | Common Lisp | Clojure |
|---|---|---|---|
| Standard | Minimalista | Nagy, ipari | Minimalista, modern |
| Dialektus | Oktatási + kutatás | Ipari, legacy rendszerek | JVM + modern FP |
| Syntax | Tiszta, kicsi | Nagy, sok extra | Tiszta, Lisp + Java integráció |
| Performance | Jó | Jó | JVM → Java-szintű |
| Continuations | call/cc támogatott | Nem szabványos | Nem támogatott |
⚠️ Scheme hátrányok
⚠️ Kevés ipari használat → inkább oktatásban, kutatásban népszerű ⚠️ Dialektusok között különbségek → Racket, Guile, Chicken, Gambit, MIT Scheme stb. ⚠️ Ökoszisztéma kisebb, mint pl. Python vagy Java → de egyszerűbb tanulni!
🌐 Népszerű Scheme implementációk
- Racket → modern Scheme (nagyon jó oktatásra, kutatásra, GUI is van)
- Guile → GNU Scheme, scriptnyelv C eszközök mellett
- Chicken Scheme → gyors, natív C kódra fordít
- MIT Scheme → oktatási célú, pl. SICP-hez ajánlott
TL;DR
Scheme:
- Funkcionális + minimalista Lisp dialektus
- Kifejezés-orientált → minden értéket ad vissza
- Elsőrendű függvények, tail recursion, continuations
- Tökéletes nyelv programozási elvek tanítására
- Kevés ipari felhasználás, de nagy elméleti hatású
- Python, JavaScript, Clojure, Rust FP részei is Scheme/Lisp inspirációjúak.