Scheme är en dialekt av programspråket Lisp, utvecklad av Guy Lewis Steele Jr. och Gerald Jay SussmanMIT 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 stöder lambdakalkyl och har därför tecknet lambda som ett av sina "varumärken"

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

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

  1. ^ 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.
  2. ^ Michael Sperber et. al. (red.) Revised6 Report on the Algorithmic Language Scheme http://www.r6rs.org/final/html/r6rs/r6rs.html

Litteratur redigera

  • Dybvig R K The Scheme Programming Language, 2003

Externa länkar redigera