95 lines
3.2 KiB
TeX
95 lines
3.2 KiB
TeX
\chapter{Introduction}
|
|
|
|
\paragraph{Lisp~:} fanboy du lisp~! C'est sans doute l'un des langage qui
|
|
inclus le plus de paradigme possible~: homoiconicité (un autre exemple serait
|
|
Prolog).
|
|
|
|
Tous les dialectes de lisp sont composés de 7 opérateurs.
|
|
|
|
Dans les dialectes sympa, il y a Scheme qui est simple et minimaliste.
|
|
Common Lisp est un standard et possède même des bibliothèques standards.
|
|
Emacs Lisp est un mélange du Common Lisp et du Mac Lisp.
|
|
|
|
Ruby est inspiré de Lisp.
|
|
|
|
\section{Paradigme}
|
|
|
|
Un \emph{paradigme} est une conception qui permet d'exprimer un certain nombre
|
|
de choses~: fonctionnel, impérative, procédural, \ldots
|
|
|
|
Cela permet de faciliter l'écriture de certain concepts~: dans certain
|
|
paradigme, il est plus simple de faire certaines choses. Tout est possible
|
|
partout, plus ou moins simplement :p\\
|
|
|
|
Le paradigme affecte donc l'expressivité d'un langage, mais aussi la manière de
|
|
penser dans un langage.
|
|
|
|
Généralement, un langage n'a pas de paradigme ferme.
|
|
|
|
\section{1er ordre}
|
|
|
|
Inventé par Christopher Strackey.\\
|
|
|
|
Un objet de première classe peut être stocké dans une variable, agrégé
|
|
(structure), passer en argument à une fonction, retourner d'une fonction,
|
|
manipuler de manière anonyme (utiliser un entier sans l'avoir assigné à une
|
|
variable) ou faire de la construction dynamique (un entier calculé à partir de
|
|
deux autres entiers).\\
|
|
|
|
Dans une langage fonctionnel, la fonction est un objet de première classe.
|
|
|
|
\subsection{Lisp 1 vs 2}
|
|
|
|
Common Lisp est un Lisp 2, Scheme un Lisp 1. Déréférence les espaces de noms.
|
|
|
|
\subsection{Mapping et folding}
|
|
|
|
\paragraph{Mapping} Consiste à appliquer une fonction sur tous les éléments
|
|
d'une fonction.
|
|
|
|
\paragraph{Folding} Consiste à combiner 2 par 2 tous les éléments d'une liste
|
|
pour n'avoir plus qu'une valeur unique à la fin.
|
|
|
|
\paragraph{Retour fonctionnel} Capacité à créer de nouvelles fonctions à la
|
|
volée.
|
|
|
|
\section{Pureté}
|
|
|
|
Une fonction mathématique, sans effet de bord. En lui passant les mêmes
|
|
arguments, elle doit toujours renvoyé la même chose quelque soit le contexte.
|
|
|
|
Au niveau des variables, elles n'existent plus~! il n'y a que des constantes.\\
|
|
|
|
Étant donné qu'écrire dans un terminal est un effet de bord, l'implémentation
|
|
des fonctions interagissant avec des fichiers sont confinées dans des bunkers.
|
|
|
|
\subsection{Intérêt}
|
|
|
|
La pureté est essentielle pour le parallélisme. En effet, avec la pureté, on a
|
|
pas de problème de concurence d'accès, ...
|
|
|
|
Par exemple Erlang est parfaitement adapté à ça. Il est d'ailleurs parfaitement
|
|
adapté à la distribution qui est prévu dans les primitives du langage.
|
|
|
|
\paragraph{Sëmantique locale aux fonctions}
|
|
Étant donné que les fonctions pures n'ont pas d'effet de bord, il est très
|
|
facile de les tester/déboguer.
|
|
|
|
\paragraph{Preuve de programme}
|
|
|
|
\section{Évaluation}
|
|
|
|
\subsection{Strict}
|
|
|
|
Dans un évaluateur strict (tel que Lisp), il va d'abord évaluer les arguments
|
|
de gauche à droite, puis il applique la fonction avec les arguments évalués.
|
|
|
|
\subsection{Lazy} ou évaluation paresseuse (Haskell).
|
|
|
|
Les expressions ne sont évaluées que quand on en a besoin.
|
|
|
|
\section{Typage}
|
|
|
|
En Haskell, toutes les variables sont typées et la vérification est faite à
|
|
l'exécution.
|