; .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)))