[Users-fr] Un problème de liste

classic Classic list List threaded Threaded
3 messages Options
Lesept Lesept
Reply | Threaded
Open this post in threaded view
|

[Users-fr] Un problème de liste

Bonjour

J’utilise des listes dans un code Scilab et je rencontre un problème pour les modifier dans une fonction. Un exemple simple :

 

a = list()

 

function test()

    a(2) = [3,4]

endfunction

 

a(1) = [1,2,4]

test()

disp(a)

 

L’exécution donne ce message d’erreur :

à la ligne     2 de la fonction test ( C:\Users\***\Desktop\list.sce ligne 10 )

à la ligne    13 du fichier exécuté C:\Users\***\Desktop\list.sce

 

Sous-matrice incorrectement définie.

 

Lorsque je demande le contenu de la liste a, j’obtiens :

 

--> a

a  =

 

 

       a(1)

 

1.           2.   4.

 

Si je mets l’instruction de la fonction dans le programme principal, tout se passe bien :

 

a = list()
a(1) = [1,2,4]
a(2) = [3,4]
disp(a)

 

L’exécution donne :

 

exec('C:\Users\***\Desktop\list.sce', -1)

 

 

             (1)

 

   1.   2.   4.

 

             (2)

 

   3.   4.

 

Est-ce un bug ou une erreur de ma part ? Comment modifier une liste depuis une fonction ?

 

Merci

 

Fabrice AUZANNEAU

Commissariat à l’énergie atomique et aux énergies alternatives

http://lists.scilab.org/mailman/listinfo/users-fr


_______________________________________________
users-fr mailing list
[hidden email]
http://lists.scilab.org/mailman/listinfo/users-fr
Samuel GOUGEON Samuel GOUGEON
Reply | Threaded
Open this post in threaded view
|

Re: Un problème de liste

Bonjour,

Le 26/05/2020 à 12:23, AUZANNEAU Fabrice a écrit :

Bonjour

J’utilise des listes dans un code Scilab et je rencontre un problème pour les modifier dans une fonction. Un exemple simple :

 

a = list()

 

function test()

    a(2) = [3,4]

endfunction

 

a(1) = [1,2,4]

test()

disp(a)

 

L’exécution donne ce message d’erreur :

à la ligne     2 de la fonction test ( C:\Users\***\Desktop\list.sce ligne 10 )

à la ligne    13 du fichier exécuté C:\Users\***\Desktop\list.sce

 

Sous-matrice incorrectement définie.


Pour éviter l'erreur, il faut ajouter
a = a
dans la fonction, juste avant a(2) = ... : le 1er adressage de a externe en lecture en crée une copie locale. C'est celle-ci qui sera modifiée par a(2) = ..., et perdue en sortie de fonction.
Pour la retourner dans l'environnement sans la faire figurer en argument de sortie explicite de la fonction, utiliser
a = return(a)

d'où :

function test()
    a = a
    a(2) = [3,4]
    a = return(a)
endfunction

Samuel



_______________________________________________
users-fr mailing list
[hidden email]
http://lists.scilab.org/mailman/listinfo/users-fr
Lesept Lesept
Reply | Threaded
Open this post in threaded view
|

Re: Un problème de liste

Merci de toutes ces réponses !

 

De : users-fr <[hidden email]> De la part de Samuel Gougeon
Envoyé : mardi 26 mai 2020 15:51
À : [hidden email]
Objet : Re: [Users-fr] Un problème de liste

 

Bonjour,

 

Le 26/05/2020 à 12:23, AUZANNEAU Fabrice a écrit :

Bonjour

J’utilise des listes dans un code Scilab et je rencontre un problème pour les modifier dans une fonction. Un exemple simple :

 

a = list()

 

function test()

    a(2) = [3,4]

endfunction

 

a(1) = [1,2,4]

test()

disp(a)

 

L’exécution donne ce message d’erreur :

à la ligne     2 de la fonction test ( C:\Users\***\Desktop\list.sce ligne 10 )

à la ligne    13 du fichier exécuté C:\Users\***\Desktop\list.sce

 

Sous-matrice incorrectement définie.

 

Pour éviter l'erreur, il faut ajouter
a = a
dans la fonction, juste avant a(2) = ... : le 1er adressage de a externe en lecture en crée une copie locale. C'est celle-ci qui sera modifiée par a(2) = ..., et perdue en sortie de fonction.
Pour la retourner dans l'environnement sans la faire figurer en argument de sortie explicite de la fonction, utiliser
a = return(a)

d'où :

function test()
    a = a
    a(2) = [3,4]
    a = return(a)
endfunction
 

Samuel

 


_______________________________________________
users-fr mailing list
[hidden email]
http://lists.scilab.org/mailman/listinfo/users-fr