Programmation Scheme/La boucle d'évaluation

Un livre de Wikilivres.

Sauf exception, tous les systèmes Scheme disposent d'un interpréteur. L'interpréteur fonctionne selon une boucle d'évaluation, appelée REPL, pour read, eval, print, loop.

Dans cette boucle, l'interpréteur :

  • R) lit une expression.
  • E) évalue (calcule le résultat de) cette expression.
  • P) imprime sur la sortie standard le résultat de l'évaluation.
  • L) recommence en R).


Un exemple d'évaluation :

scheme> (+ 1 2 3 4 5 6)
⇒ 21

La boucle d'évaluation permet d'utiliser le système comme une calculette sophistiquée, de saisir ou tester des expressions relativement simples.

Pour des programmes plus complexes, on utilisera un éditeur de texte capable d'apparier les parenthèses, comme Emacs, et on chargera le code saisi dans l'évaluateur :

scheme> (load "mon-code.scm")
Le source se trouve dans le fichier mon-code.scm

Manière décrire[modifier | modifier le wikicode]

Les parenthèses déroutent les débutants en Scheme ou Lisp. Avec un peu d'expérience — et un bon éditeur de texte — on les oublie, on doit les oublier.

Habituellement, le code Scheme se lit et s'écrit selon l'indentation, c'est-à-dire le décalage vers la droite. Habituellement, on met toutes les parenthèses fermantes les unes à la suite des autres, on ne fait pas de diagonales de parenthèses fermantes comme en C++ ou Java ; l'imbrication des blocs est définie par leur seule indentation — les parenthèses sont destinées au compilateur ou à l'interpréteur, la personne qui programme, elle, ne les « voit pas »…

Indentation mode C++/Java
( <prm>
   ( <prm>
      ( <prm> … )
   )
)


Indentation mode Scheme
( <prm>
   ( <prm>
      ( <prm> … )))


Exemple
(define (fold-left fonction graine liste)
  (if (null? liste)
      graine
      (fold-left fonction (fonction graine (car liste)) (cdr liste))))
scheme> (fold-left + 0 (list 1 2 3 4 5 6))
⇒ 21
scheme> (fold-left * 1 (list 1 2 3 4 5 6))
⇒ 720

Voir aussi[modifier | modifier le wikicode]

Dans Wikipédia



Grammaire de base < > Variables globales et variables locales