Scheme - Définition et Explications

Introduction

Scheme
Lambda lc.svg

Développeur Guy L. Steele et Gerald Jay Sussman
Paradigme programmation fonctionnelle (Un langage fonctionnel est un langage de programmation dont la syntaxe et les caractéristiques...)
Typage fort, dynamique (Le mot dynamique est souvent employé désigner ou qualifier ce qui est relatif au mouvement. Il...)
Influencé par Lisp (Lisp est la plus ancienne famille de langages impératifs et fonctionnels. Développé...)
A influencé JavaScript (JavaScript est un langage de programmation de scripts principalement utilisé dans les pages...), Ruby (Ruby est un langage de programmation libre. Il est interprété, orienté objet, et...), Hop
Implémentations Bigloo, Gambit, PLT Scheme (Scheme (prononcer « skiim' ») est un langage de programmation dérivé...)...

Scheme (prononcer « skiim' ») est un langage de programmation (Un langage de programmation est un langage informatique, permettant à un être humain...) dérivé du langage fonctionnel Lisp, créé dans les années 1970 au Massachusetts Institute of Technology (Le Massachusetts Institute of Technology ou MIT, en français Institut de technologie du...) (MIT) par Gerald Jay Sussman (Gerald Jay Sussman est professeur d' Electrical Engineering (génie électrique) au Massachusetts...) et Guy L. Steele.

Le but des créateurs du langage était d'épurer le langage Lisp en conservant les aspects essentiels, la flexibilité et la puissance (Le mot puissance est employé dans plusieurs domaines avec une signification particulière :) expressive. Scheme a donc une syntaxe extrêmement simple, avec un nombre (La notion de nombre en linguistique est traitée à l’article « 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 (De manière générale, le mot objet (du latin objectum, 1361) désigne une entité définie dans...) et donc multi-paradigme.

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

Les types de données (Dans les technologies de l'information (TI), une donnée est une description élémentaire, souvent...) 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 (Une S Expression (ou Expression Symbolique) est une convention pour la représentation de données...), dont tous les autres types dérivent, rendant possible la métaprogrammation (La métaprogrammation est, par analogie avec les métadonnées et les métaclasses, la...), c'est-à-dire la possibilité d'étendre le langage avec de nouveaux opérateurs spéciaux.

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 (Le terme concaténation (substantif féminin), du latin cum (« avec »)...) 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 (Une définition est un discours qui dit ce qu'est une chose ou ce que signifie un nom. D'où la...) 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 (NULL est un mot clef présent dans de nombreux langages informatiques, et qui désigne...)? 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)      
Page générée en 0.038 seconde(s) - site hébergé chez Contabo
Ce site fait l'objet d'une déclaration à la CNIL sous le numéro de dossier 1037632
Ce site est édité par Techno-Science.net - A propos - Informations légales
Partenaire: HD-Numérique