Je voulais savoir si il y avait des gens aussi qui bossaient dessus. ça va faire la deuxième année à la fac qu’on apprend ce langage.
En gros a la base il y avait Fortran, ensuite LISP pour faire de l’IA et du lambda calcul. Scheme découle de LISP , en prenant un peu d’objet et d’impératif ! On peut faire des appels systèmes, de la 3D, du web.
Donc on peux faire n’importe quoi avec.
C’est dynamiquement typé et interpreté.
Pour ceux qui voit pas du tout ce que c’est et qui veulent en savoir plus.
Un programme est une liste, donc plein de parenthèse dans tout les sens.
les ; c’est les commentaires.
Par exemple a + b + c va s’écrire (+ a b c) on appelle la fonction + avec les paramètres a, b et c.
Un exemple de fonction
(define (op f a b)
(f a b))
la fonction op prend une fonction f et 2 nombres.
Utilisation :
[code](op + 1 4)
5[/code]
le if prend 3 arguments :
- La condition
- Ce qui se passe si la condition est vraie.
- Ce qu’il se passe si elle est fausse.
C’est pas limpide ??
Et tout est vrai sauf #f (false) (à savoir quand meme)
Introduction au lambda calcul
(op (lambda (a b) (if (< a b) a b)) 1 5)
1
on appelle la fonction op avec 1 et 5 et la fonction f sera la fonction qui renvoi a si a < b et b sinon.
En gros on vient de créer un fonction à la volé sans trop de problème.
Vous me faites ça en C ?? en une ligne ??
Un exemple de CPS (Continuation Passing Style)
[code]Factorielle normale :
(define (fac n) ; calcule f(n!)
(if (= n 0)
1
(* n (fac (- n 1)))))
Gros problème de pile vu que la fonction récursive est enveloppée (* n a chaque fois) c’est super pas bien.
(define (k-fac n f); calcule f(n!)
(if (= n 0)
(f 1)
(k-fac (- n 1) (lambda (r) (f (* n r))))))
Plus de problème au fur et a mesure on construit une fonction qui donnera n! quand on l’appellera avec 1
On peut se la faire un iterative aussi la meilleur methode. en definissant une fonction (iter n res) a l’interieur de (fac n)[/code]
On nous a fait faire plein d’algo sur les listes et les arbres. les fonctions font quelques lignes.
On a fait du filtrage sur les strings.
De l’imperatif, en gros on prend un prog C et on le recompie
on utlise alors des set! pour ecraser des variables. Ce qui parait normal dans un language imperatif.
Mais pas en scheme. Mais pour certaine chose on est obligé de passer par là.
Scheme dispose aussi d’un langage de macro assez puissant vu qu’on code en scheme dedans. On peut coder while (qui n’est pas de base) en quelques lignes.
Les fonctions qui font ca permette de dire ce qu’on va faire pour le premier element.
Et on met … et tout est fait.
[code](define-syntax while
(syntax-rules ()
((while t expr …) (letrec ((iter (lambda ()
(if t
(begin expr …
(iter))))))
(iter)))))
let permet de définir des variables par exemple
(let ((a 1)(b 2))
(+ a b))
3
le letrec fait pareil mais on peut lui donner des fonctions récursives.[/code]
Pour ceux qui savent pas les macros vont prendre le code est le modifier selon les regles enoncées.
Ce qui est marrant c’est qu’on fois executé le programme peut se modifier egalement.
(Les premiers virus ont ete fait en LISP…)
J’ai zappé plein de truc, mais c’est juste pour vous faire decouvir une autre facette de la programmation.
Si vous voulez tester, c’est gratuit. Je code sur DrScheme v209 ça tourne sur tout les OS \o/
DrScheme
Pour l’utiliser il y a 2 parties.
Celle d’en haut vous taper le code. Quand on l’execute les resultats s’affiche en bas dans le top-level.
Vous pouvez aussi taper aussi ce que vous voulez dans le top level.
hf…