Scheme

Scheme
Page d'aide sur l'homonymie Pour l’article homonyme, voir scheme
Scheme
Lambda lc.svg

Développeur Guy L. Steele et Gerald Jay Sussman
Paradigme programmation fonctionnelle
Typage fort, dynamique
Influencé par Lisp
A influencé JavaScript, Ruby, Hop
Implémentations Bigloo, Gambit, PLT Scheme...

Scheme (prononcer « skiim' ») est un langage de programmation dérivé du langage fonctionnel Lisp, créé dans les années 1970 au Massachusetts Institute of Technology (MIT) par Gerald Jay Sussman et Guy L. Steele.

Le but des créateurs du langage était d'épurer le Lisp en conservant les aspects essentiels, la flexibilité et la puissance expressive. Scheme a donc une syntaxe extrêmement simple, avec un nombre très limité de mots-clés. Comme en Lisp, la notation préfixée permet de s'affranchir des opérateurs de précédence. De plus, la puissance des macros de Scheme lui permet de s'adapter à n'importe quel problème, notamment de le rendre orienté objet et donc multi-paradigme.

La spécification de Scheme[1] précise que toutes les implémentations doivent optimiser le cas de la récursion terminale.

Les types de données de base de Scheme sont les booléens, les nombres, qui peuvent être entiers de taille indéfinie, rationnels ou complexes, les caractères ou les symboles, qui sont des variables.

À ceux-là s'ajoutent des types de données composites suivants : chaînes de caractères, vecteurs, paires orientées, listes, listes associatives, tables de hachage et un type particulier générique, la S-expression, dont tous les autres types dérivent, rendant possible la métaprogrammation, c'est-à-dire la possibilité d'étendre le langage avec de nouveaux opérateurs spéciaux.

Sommaire

Aperçu de la syntaxe du langage

Les variables sont typées dynamiquement et leur portée est lexicale :

 (define var1 value)
 
  (let ([var2 value])
    ...)

Listes :

  (cons 1 (cons 2 (cons 3 (cons 4 '()))))

Cette concaténation peut être abrégée en

  (list 1 2 3 4)

ou en

  '(1 2 3 4)

Fonctions : elles sont définies comme des lambda-expressions

  (define fun
    (lambda (arg1 arg2)
       ...))

ou plus simplement

  (define (fun arg1 arg2)
    ...)

Application à une liste :

  (apply fun (list value1 value2))

Evaluations conditionnelles :

  (cond (test1 expr1)
        (test2 expr2)
        ...
        (else exprn))

et aussi

  (if condition
        then-expr
        else-expr)

Exemple 1 - calcul d'une factorielle :

  (define (factorial n)
    (if (= n 0)
        1
        (* n (factorial (- n 1)))))
 (factorial 5)
 ;; ⇒ 120

Exemple 2 - définition d'une fonction map, qui applique une lambda-expression (qui élève son argument au carré) à tous les éléments d'une liste :

  (define (map f lst)
    (cond ((null? lst) lst)
          (else (cons (f (car lst))
                      (map f (cdr lst))))))
 (map (lambda (x) (* x x)) '(1 2 3 4))
 ;;  ⇒ (1 4 9 16)

Versions tail-récursives des deux exemples précédents :

  (define (factorial n)
    (let loop ((fact 1)
               (n n))
      (cond ((= n 0) fact)
            (else (loop (* n fact) (- n 1))))))
 (factorial 5)
 ;; ⇒ 120
  (define (map f lst)
    (do ((lst lst (cdr lst))
         (res '() (cons (f (car lst)) res)))
        ((null? lst) (reverse res))))
 (map (lambda (x) (* x x)) '(1 2 3 4))
 ;; ⇒ (1 4 9 16)

Mises en œuvre

Scheme est, avec Common Lisp, le dialecte de Lisp le plus populaire. Le langage est défini par le document R6RS (Revised6 Report on the Algorithmic Language Scheme : Sixième révision du rapport sur le langage algorithmique Scheme).

Les principales implantations de Scheme sont :

  • Chez Scheme, un interprète Scheme gratuit et compilateur commercial pour Microsoft Windows et plusieurs systèmes Unix
  • Chicken est compilateur Scheme-vers-C.
  • Gambit est un compilateur Scheme-vers-C conforme à R5RS.
  • Guile est le langage d'extension du projet GNU. L'interprète Scheme est une bibliothèque qui peut servir comme langage de script pour des applications.
  • Racket, anciennement PLT-Scheme, une suite de programmes incluant un interprète (racket), un outil de développement graphique (MrEd), un éditeur orienté pédagogie (DrRacket), et divers composants incluant des bibliothèques Component object model (COM) et ODBC.
  • Scsh ou Scheme Shell est un produit R5RS utilisable comme langage de script système et interprète de commandes.
  • Gauche est un produit R5RS multilingue sous licence BSD, pour programmeurs et administrateurs systèmes.
  • Bigloo est un compilateur Scheme-vers-C et Scheme-vers-Java qui produit des exécutables compacts et rapides, doté d'un nombre relativement important de bibliothèques.
  • STklos est une implémentation libre du langage Scheme de l'Université de Nice qui est légère et efficace.
  • Le logiciel de retouche d'images Gimp inclut un interprète d'un langage dérivé de Scheme, TinyScheme, pour scripter (appelé script-fu) certaines manipulations d'image.
  • D'autres produits se trouvent sur la schemers.org FAQ

Notes et références

Voir aussi

Sur les autres projets Wikimedia :

Articles connexes

Liens externes



Wikimedia Foundation. 2010.

Contenu soumis à la licence CC-BY-SA. Source : Article Scheme de Wikipédia en français (auteurs)

Игры ⚽ Поможем решить контрольную работу

Regardez d'autres dictionnaires:

  • Scheme — Basisdaten Paradigmen: Multi Paradigma: funktional, prozedural, meta Ersche …   Deutsch Wikipedia

  • scheme — [skiːm] noun [countable] 1. an official plan or arrangement that is intended to help people in some way: • a government training scheme for the unemployed 2. FINANCE an arrangement in which the government or an employer provides financial help to …   Financial and business terms

  • Scheme — Información general Paradigma multi paradigma Apareció en 1975 …   Wikipedia Español

  • schème — [ ʃɛm ] n. m. • 1800; « figure de style » 1586; de schéma 1 ♦ Philos. Chez Kant, Représentation qui est l intermédiaire entre les phénomènes perçus par les sens et les catégories de l entendement. Schème transcendantal. ⇒ concept. Schème moteur… …   Encyclopédie Universelle

  • Scheme — Семантика: функциональный Тип исполнения: интерп …   Википедия

  • Scheme — Scheme, n. [L. schema a rhetorical figure, a shape, figure, manner, Gr. ?, ?, form, shape, outline, plan, fr. ?, ?, to have or hold, to hold out, sustain, check, stop; cf. Skr. sah to be victorious, to endure, to hold out, AS. sige victory, G.… …   The Collaborative International Dictionary of English

  • Scheme — may refer to:* Scheme (programming language), a minimalist, multi paradigm dialect of Lisp * Scheme (mathematics), an important concept in algebraic geometry * Scheme (linguistics), a figure of speech that changes a sentence s structureystematic… …   Wikipedia

  • scheme — n 1: a combination of elements (as statutes or regulations) that are connected, adjusted, and integrated by design: a systematic plan or program an administrative inspection scheme 2: a crafty, unethical, or fraudulent project a scheme to defraud …   Law dictionary

  • scheme — [skēm] n. [L schema < Gr schēma (gen. schēmatos), a form, appearance, plan, akin to schein, echein, to hold, have < IE base * seĝh , to hold, hold fast, conquer > SCHOOL1, Sans sáhas, power, victory, Goth sigis, Ger sieg, victory] 1. a)… …   English World dictionary

  • Scheme — Scheme, v. t. [imp. & p. p. {Schemed}; p. pr. & vb. n. {Scheming}.] To make a scheme of; to plan; to design; to project; to plot. [1913 Webster] That wickedness which schemed, and executed, his destruction. G. Stuart. [1913 Webster] …   The Collaborative International Dictionary of English

  • Scheme — Scheme, v. i. To form a scheme or schemes. [1913 Webster] …   The Collaborative International Dictionary of English

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”