Ajout de quelques fonctions utiles (a complete)

This commit is contained in:
Bertrand BRUN 2010-11-20 01:25:26 +01:00
parent 7e23133561
commit 07c55f7986

View File

@ -25,4 +25,52 @@
;; nom-fonction := variable
;; variable := tous les symboles de Scheme autres que les mots-cles
;; symbole := tous les symboles de Scheme
;; }}} Grammaire du langage
;; }}} Grammaire du langage
;; {{{ Utilitaire generaux
;;
;; Necessaires pour l'auto-amorcage (on pourrait egalement les placer dans l'environnement initial)
;; Signaler une erreur et abandonner l'evaluation
(define (scheme-erreur fn message donnee)
(erreur 'meval-scheme fn message donnee))
;; cadr: LISTE[alpha]/au moins deux termes/ -> alpha
;; (cadr L) rend le second terme de la liste "L"
(define (cadr L)
(car (cdr L)))
;; cddr: LISTE[alpha]/au moins deux termes/ ->LISTE[alpha]
;; (cddr L) rend la liste "L" privee de ses deux premiers termes
(define (cddr L)
(cdr (cdr L)))
;; caddr: LISTE[alpha]/au moins trois termes/ -> alpha
;; (caddr L) rend le troisieme terme de la liste "L"
(define (caddr L)
(car (cdr (cdr L))))
;; cdddr: LISTE[alpha]/au moins trois termes/ -> LISTE[alpha]
;; (cdddr L) rend la liste "L" privee de ses trois premiers termes
(define (cdddr L)
(cdr (cdr (cdr L))))
;; cadddr: LISTE[alpha]/au moins quatre termes/ -> alpha
;; (cadddr L) rend le quatrieme terme de la liste "L"
(define (cadddr L)
(car (cdr (cdr (cdr L)))))
;; length: LISTE[alpha] -> entier
;; (length L) rend la longueur de la liste "L"
(define (length L)
(if (pair? L)
(+ 1 (length (cdr L)))
0))
;; meval-scheme-map: (alpha -> beta) * LISTE[alpha] -> LISTE[beta]
;; (meval-scheme-map f L) rend la liste des valeurs de "f" appliquee aux termes de la liste "L"
(define (meval-scheme-map f L)
(if (pair? L)
(cons (f (car L)) (meval-scheme-map f (cdr L)))
'()))