Apprendre Maple Index du Forum Apprendre Maple
Site dédié au logiciel de calcul formel Maple
 
  Page d'accueilPage d'accueil   FAQFAQ    RechercherRechercher    Liste des MembresListe des Membres    Groupes d'utilisateursGroupes d'utilisateurs 
S'enregistrerS'enregistrer    ProfilProfil   Se connecter pour vérifier ses messages privésSe connecter pour vérifier ses messages privés   ConnexionConnexion 

Determination de la nature d'un objet et de son contenu

 
Poster un nouveau sujet   Répondre au sujet    Apprendre Maple Index du Forum -> Programmation
Voir le sujet précédent :: Voir le sujet suivant  
Auteur Message
bendesarts



Inscrit le: 27 Fév 2009
Messages: 234

MessagePosté le: 01 Oct 2015 8:33    Sujet du message: Determination de la nature d'un objet et de son contenu Répondre en citant

Bonjour,

J'utilise MapleSim qui est un logiciel de simulation multiphysique couplé avec Maple. Il existe un certain nombre de fonctions dites API de Maplesim qui sont des packages ou modules Maple permettant d'extraire les résultats de MapleSim dans Maple.

Un aperçu est donné à cette page:

http://www.maplesoft.com/support/help/MapleSim/view.aspx?path=MapleSim

Je cherche à connaître la nature et le contenu d'un de ces objets. Comment est-ce que je peux ?

Par exemple, "MapleSim" est un module et contient "LinkModel" qui est un autre module et deux packages "Tools" et "Analysis".

1) Comment est-ce que je peux connaitre la nature d'un objet ? Je pense qu'il doit exister une fonction à cet effet ?

2) Comment est-ce que je peux peux explorer le contenu d'un module ? En d'autres termes, savoir les enfants d'un module et ainsi de suite si un module est contenu dans le module principal, les enfants de ce module ...

Le contexte de ma question est MapleSim mais je pense que ma question est générale à Maple.

Merci d'avance pour votre aide.
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
ALS



Inscrit le: 11 Sep 2006
Messages: 647

MessagePosté le: 01 Oct 2015 10:58    Sujet du message: Répondre en citant

Bonjour,
Je n'ai pas MapleSim mais j'ai essayé de répondre à votre question à partir d'un exemple de module trouvé dans la doc de Maple.

Code:

> LinkedList := module()
>     option package;
>     export New, Prepend;
>     local DisplayNode;
>
>     New := proc( data )
>     module()
>         export Val, Next;
>             local ModulePrint;
>
>         Val := data;
>         Next := 0;
>
>             ModulePrint := proc()
>                DisplayNode(thismodule);
>             end proc;
>     end module;
>     end proc;
>
>     Prepend := proc( llist, val )
>         local node;
>         node := New(val);
>         node:-Next := eval(llist);
>         return node;
>     end proc;
>
>     DisplayNode := proc( node )
>     if node = 0 then
>         return NULL;
>     else
>         return node:-Val, DisplayNode(node:-Next);
>     end if;
>     end proc;
>
> end module:
>
> with(LinkedList);
>

                            [New, Prepend]

> print(LinkedList);
>

  module()
local DisplayNode;
export New, Prepend;
option package;
end module

> o:=op(eval(LinkedList));


  o := New, Prepend, module()
local DisplayNode;
export New, Prepend;
option package;
end module,
DisplayNode



o:=op(eval(mymodule)); donne la liste des composants du module.

L'aide sur "module" parle de 3 opérandes:

Citation:


• Modules have three operands, which are accessible using op.


* op 1 is the eseq of exports


* op 2 is a pointer to a module definition "shell"


* op 3 is the lseq of locals



Effectivement, on arrive à les récupérer ainsi :

Code:

> op(1,eval(LinkedList));

                             New, Prepend

> op(2,eval(LinkedList));

  module()
local DisplayNode;
export New, Prepend;
option package;
end module

> op(3,eval(LinkedList));

                             DisplayNode



Sinon, après l'aide parle de Moddefs, qui a 8 opérandes mais je ne vois pas comment y accéder.

Citation:


Moddefs have eight operands, which are accessible using op.
* op 1 is the sequence of (implicit) parameters
* op 2 is the expression sequence of local variables
* op 3 is the expression sequence of options
* op 4 is the expression sequence of exports
* op 5 is the expression sequence of description strings
* op 6 is the expression sequence of globals
* op 7 is the sequence of lexicals
* op 8 is the name of a named module



J'ai essayé ceci:

Code:

> for k to 8 do if (op(k,op(2,eval(LinkedList)))=NULL) then print("NULL") else print(op(k,op(2,eval(LinkedList)))) fi od;

                              thismodule


                             DisplayNode


                               package


                             New, Prepend


                                "NULL"


                                "NULL"


                                "NULL"


                                "NULL"




Mais cela ne semble pas la même chose ...

@+
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
bendesarts



Inscrit le: 27 Fév 2009
Messages: 234

MessagePosté le: 07 Oct 2015 14:02    Sujet du message: Répondre en citant

Super, je te remercie pour ton aide.
Par contre, je n'ai pas encore bien compris la structure de ce module.
Pour y voir plus clair, j'ai essayé d'indenter le code (je te l'ai envoyé par mail).
Mais, je ne vois pas à quoi correspond la ligne module() sous New := proc( data ) et la ligne end module; associé. A quoi correspond ce module ?

J'ai relu le point "cours" que tu avais fait au sujet des modules. Sur ce point, si je comprends bien, un module peut contenir des données, des fonctions (procédures). Cependant, ne peut-il pas aussi contenir d'autres modules non ?

Des plus, est-ce que tu aurais des idées pour identifier la nature de chacun des composants du module (fonctions, modules enfants, ...) ?

Sinon, j'ai lancé ta commande sur le module GetMultibody de MapleSim. Cà a l'air interessant.
Voici le résultat

Code:
Code:
for k to 8 do if (op(k,op(2,eval(MB)))=NULL) then print("NULL") else print(op(k,op(2,eval(MB))))
fi od;
                           thismodule
SetOptions, SetAdditionalKinData, SetAdditionalDynData,

  PostProcessDyEQs, DFPModule, Print, vPd, vPd_dot, xJi, xJdInv,

  xG, vDepVels, vDepAccels, vDynamicEQs, AnalyseModel,

  KinAnalysis, DynAnalysis, SetGenCoords, SetQiQd, SetJacPos,

  SetJacVel, SetJdInvAndG, SetDepVels, SetDepAccels,

  SetQiDepEdgeInfo, ReducePosCons, ProcessPosCons, GetVelAccCons,

  ModType, lmQiSys, lmQdSys, lmQiPreSolved, lmQdPreSolved,

  llmSubSysCons, tePosConstraintInfo, teZeroReactionSubs,

  leJdInvSubs, leGSubs, leDepAccSubs, leMFSubs, vPosCons,

  vVelCons, vAccCons, vDynEQs, leConstParams, leVarParams,

  leReParamSubs, leConsistentSubs, leParamSubs, leICGuesses,

  leSummary, bSolvePosition, bSubMF, sDynSimpType, sKinSimpType,

  bSubEmbed, bSimpEmbed, sAugType, sFormType, leBaumgarte,

  bGenSubSys, bSilentMode, bCalledFromMapleSimGUI, mLGM, mMath,

  pTFunc, sModType
                             "NULL"
GetParams, GetInputs, GetPosCons, GetVelCons, GetAccCons,

  GetDynEQs, GetKinTrans, GetSysEQs, GetFrameMotion,

  GetInterFrameForce, GetBaumgarte, SetBaumgarte, GetNodeNames,

  GetSysODEs, GetAYBSysODEs, GetSimCodeData, GetLGM, GetMass,

  GetCoM, GetInertia, Reparameterize, ApplySimplification,

  AddConstraints, PrintSummary, vQ, vQdot, vP, vPdot, vX, vXdot,

  vKinTransRHS, xJacPos, xJacVel, vVelRHS, vAccRHS, xM, vLambda,

  xC, vF, vReactions, mExprMan, leTo2ndOrderSubs, sDFPVersion,

  sLibFile
                             "NULL"
                             "NULL"
                             "NULL"
                             "NULL"


Je vais voir si je peux accéder à ces fonctions.

Merci pour ton aide.
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
ALS



Inscrit le: 11 Sep 2006
Messages: 647

MessagePosté le: 08 Oct 2015 8:52    Sujet du message: Répondre en citant

Bonjour,

C'est un code de module que j'ai trouvé dans la doc de Maple: je pense qu'il s'agit d'une création d'une liste chainée de données. New crée une nouvelle donnée à la liste et Prepend en ajoute une en tête de liste.
Mais peu importe ...

Effectivement on peut mettre un module en résultat de sortie d'une procédure d'un module, comme dans la procédure New(data).

Le résultat sur MapleSim semble prometteur.

J'ai essayé la fonction whattype sur les éléments mais j'obtiens symbol ou exprseq (séquence).

Code:


> for k to 8 do if (op(k,op(2,eval(LinkedList)))=NULL) then print("NULL") else print(op(k,op(2,eval(LinkedList)))):print(whattype( op(k,op(2,eval(LinkedList)))))
fi od;
                           thismodule
                             symbol
                          DisplayNode
                             symbol
                            package
                             symbol
                          New, Prepend
                            exprseq
                             "NULL"
                             "NULL"
                             "NULL"
                             "NULL"



On n'est pas plus avancés. Sorry!
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
Montrer les messages depuis:   
Poster un nouveau sujet   Répondre au sujet    Apprendre Maple Index du Forum -> Programmation Toutes les heures sont au format GMT + 2 Heures
Page 1 sur 1

 
Sauter vers:  
Vous ne pouvez pas poster de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas voter dans les sondages de ce forum


phpBB

Développé par phpBB © 2001, 2006 phpBB Group
Traduction par : phpBB-fr.com


Apprendre Maple - ©  - Alain Le Stang - Navigation optimisée pour une résolution 1024 x 768.