; .EnTete "Le-Lisp (c) version 15.2" " " "Les tableaux" ; .EnPied "array.ll" "F-%" " " ; .Annexe F "Les Tableaux" ; .nr % 1 ; ; .Centre "*****************************************************************" ; .Centre " Ce fichier est en lecture seule hors du projet ALE de l'INRIA. " ; .Centre " Il est maintenu par ILOG SA, 2 Avenue Gallie'ni, 94250 Gentilly " ; .Centre " (c) Le-Lisp est une marque de'pose'e de l'INRIA " ; .Centre "*****************************************************************" ; .Centre "$Header: array.ll,v 4.1 88/01/13 12:18:16 kuczynsk Rel $" (unless (>= (version) 15.2) (error 'load 'erricf 'array)) ; Toutes ces fonctions sont "autoload" dans le syste`me minimum. ; ce qui est bien pratique (de makearray (arg1 . #:system:larg) ; fabrique un tableau (d'au moins une dimension) (if #:system:larg (let ((result (makevector arg1 ()))) (for (i 0 1 (1- arg1)) (vset result i (apply 'makearray #:system:larg))) result) arg1)) (dmd aref (inst . #:system:larg) ; acce`s a` un e'le'ment d'un tableau (cond ((null #:system:larg) inst) ((atom #:system:larg) (error 'aref 'errwna #:system:larg)) (t `(vref (aref ,inst ,.(nreverse (cdr (reverse #:system:larg)))) ,(car (last #:system:larg)))))) (dmd aset (inst . #:system:larg) ; e'criture d'un e'le'ment d'un tableau (cond ((atom #:system:larg) (error 'aset 'errwna #:system:larg)) ((consp (cdr #:system:larg)) `(vset (aref ,inst ,.(nreverse (cddr (reverse #:system:larg)))) ,(cadr (reverse #:system:larg)) ,(car (last #:system:larg)))) (t inst)))