Scheme
![](http://upload.wikimedia.org/wikipedia/commons/thumb/3/39/Lambda_lc.svg/100px-Lambda_lc.svg.png)
Scheme är en dialekt av programspråket Lisp, utvecklad av Guy Lewis Steele Jr. och Gerald Jay Sussman på MIT någon gång på 1970-talet. Scheme är vid sidan av Common Lisp den viktigaste Lisp-dialekten. Filosofin bakom språket är minimalistisk, det finns väldigt begränsade programbibliotek så användaren får själv skapa de flesta funktioner från grunden. Scheme används i undervisningssyfte på flera universitet runt om i världen (tidigare även i Sverige).[1] bland annat KTH. Många kurser använder sig av Sussmans bok Structure and Interpretation of Computer Programs.
Scheme använder sig enligt språkdefinitionen av svansrekursion [2]. Det blir på så sätt lätt att göra en iterativ process av en rekursiv funktion.
Programexempel
[redigera | redigera wikitext]Det klassiska programmet "Hello, world!"
(display "Hello, world!")
(newline)
Rekursiv funktion som räknar ut fakulteten av ett tal n:
(define (fakultet n)
(if (= n 0)
1
(* n (fakultet (- n 1)))))
Denna funktion kommer att bli en rekursiv process, för att ett extra tal måste hållas i minnet varje gång funktionen anropas.
Om man istället betraktar den här varianten för faktultetsberäkning:
(define (fakultet n)
(define (fakultet-iter n sum)
(if (= n 0)
sum
(fakultet-iter (- n 1) (* n sum))))
(fakultet-iter n 1))
Här har vi en inre hjälpfunktion som håller reda på mellanvärdena vid fakultetsberäkningen och samlar upp dem. Hjälpfunktionen är rekursiv, men på grund av Schemes svansrekursion kommer denna process bli iterativ, och därmed inte kräva lika mycket av datorns minne.
Källor
[redigera | redigera wikitext]- ^ MIT-Press, lista över skolor som använder Scheme i undervisningen https://mitpress.mit.edu/sites/default/files/sicp/adopt-list.html Arkiverad 23 april 2022 hämtat från the Wayback Machine.
- ^ Michael Sperber et. al. (red.) Revised6 Report on the Algorithmic Language Scheme http://www.r6rs.org/final/html/r6rs/r6rs.html
Litteratur
[redigera | redigera wikitext]- Dybvig R K The Scheme Programming Language, 2003