Scolring - Forum

Entraides et échanges autour de la technologie Scol - Informations and exchanges on the Scol technology

Vous pouvez changer la langue de l'interface une fois inscrit - You can change the language once registered

You are not logged in.

#1 3-Feb-2011 21:18:18

iri
Admin. / Scol language & Scol apps developer
From: France
Registered: 22-Feb-2009
Posts: 2,024
Website

Liste Scol et va_list

Salut !

Soit une fonction Scol admettant, en entrée, une liste (de types quelconques).

Comment taduire en interne cette liste pour avoir une va_list ?

Exemple (C) :

void fonctionVariable (int a, ...)
{
    va_list args;
    ...
}

int fonction (mmachine m)
{
    int mlisteScol, element;

    mlisteScol = MMpull (m)>>1
    while (mlistScol != NIL)
    {
        element = MTOP (MMfetch (m, mlistScol, 0));
        ... /* comment ajouter element à une liste d'argument ?? Est-ce possible ?? */
        mlistScol = MMfetch (m, mlistScol, 1)>>1;
   }
   fonctionVariable (10, ??????); /* ma liste d'arguments provenant de la liste Scol ???  */
...
}

Si c'est clair ...! cool

Ça me simplifierait bien les choses smile

Offline

#2 3-Feb-2011 22:56:30

arkeon
Admin. / Scol language & OpenSpace3D developer
From: Nantes
Registered: 30-Mar-2009
Posts: 5,162
Website

Re: Liste Scol et va_list

hmmm ... non désolé c'est pas clair smile

tu veux faire une sorte de lcat ?

Offline

#3 3-Feb-2011 23:06:44

iri
Admin. / Scol language & Scol apps developer
From: France
Registered: 22-Feb-2009
Posts: 2,024
Website

Re: Liste Scol et va_list

lcat ?

Offline

#4 4-Feb-2011 09:58:20

Nodrev
Scol Language & OS3D developer
From: Nantes, France
Registered: 29-Dec-2009
Posts: 197

Re: Liste Scol et va_list

Hello,

Tu n'aimes pas le C++, mais là, un bête std::vector remplacerais efficacement le "..." dans la signature de la fonction.
Et je crois me rappeller que ces "va_list" sont vraiment pas recommandés en général (pour moi c'est "forbiden", à ne pas utiliser, et il y a une bonne raison, même si je me rappelle plus pourquoi tongue, mais bon faut avoir des convictions dans la vie roll).
Sinon, en fouillant un peu sur le net:
http://bytes.com/topic/c/answers/639132 … on-va_list
Donc à priori, c'est faisable, mais avec un code par plate-forme (voir par compilo étant donné que la bidouille est destinée à s'assurer que la taille des variables ajoutés à la va_list est correcte), ce qui est beaucoup plus lourd à maintenir qu'un std::vector, et ça fait beaucoup plus de code aussi...

Nodrev

Offline

#5 4-Feb-2011 12:03:42

iri
Admin. / Scol language & Scol apps developer
From: France
Registered: 22-Feb-2009
Posts: 2,024
Website

Re: Liste Scol et va_list

Yop

En fait, j'en ai marre de strcatn : c'est pas pratique du tout.
genre :

strcatn "Alice a " :: (itoa age) :: " ans, habite au " :: (itoa numero) :: " de la rue " :: rue :: " et possède " :: (ftoa compte) :: "euros sur son compte" :: nil;

J'aimerais une sorte de sprintf mais avec une liste Scol du coup car pas possible de passer un nb variable d'arguments en Scol :

strF "Alice a %d ans, habite au %d de la rue %s et possède %f euros sur son compte", age :: numero :: rue :: compte :: nil;

Comme tout codeur, je suis paresseux et cela m'aurait permis ensuite une utilisation directe de sprintf et de renvoyer le résultat tout frais, tout beau wink

Concernant les va_list, je suis complètement d'accord, c'est à proscrire. Je comptais juste l'utiliser dans ce cas précis (comme les fonctions *printf).
La VM les utilise dans le cas de MMechostr par exemple mais c'est en interne.

Mon problème n'est pas la va_list en elle-même, mais la "conversion" entre la liste Scol provenant d'une application et la liste d'arguments interne à la VM.

Sur un autre forum, des intervenants m'ont donné d'autres idées sans les va_list. Plus long à coder mais le résultat, si résultat il y a, sera effectivement plus propre.

Quant au C++, je sais, pas taper !!

Offline

#6 4-Feb-2011 15:53:12

iri
Admin. / Scol language & Scol apps developer
From: France
Registered: 22-Feb-2009
Posts: 2,024
Website

Re: Liste Scol et va_list

Ok, j'ai réussi ma strF (string formatted)  smile Le code est à affiner mais il fonctionne.

_fooS strF "%s is a %s language !" "Scol" :: "good" :: nil;

affiche bien "Scol is a good language !"
Ça donne une syntaxe moins exotique que strcatn.

Cependant, j'avais oublié un point important que j'avais déjà étudié à de multiples reprises par le passé : on ne peut pas panacher les types dans une liste Scol !

genre : S :: S :: I :: S :: F :: S :: nil;

(sauf cas r2 voire r3, ... mais ce sont des cas particuliers).

Donc, il faut que la liste ne soit que de récursivité 1 pour que la strF fonctionne (Scol plante logiquement sinon). C'est quelque peu dommage. Donc que des S, des I ou des F ...

Offline

#7 4-Feb-2011 20:31:32

iri
Admin. / Scol language & Scol apps developer
From: France
Registered: 22-Feb-2009
Posts: 2,024
Website

Re: Liste Scol et va_list

S'il eiste un moyen pour obtenir des listes panachées, le code source est déjà près. Reste  juste à le rendre joli big_smile

Donc, le prototype de strF est :

strF : fun [S [u0 r1]] S

Pour l'heure, les options %s, %d, %f, %x sont prises en compte mais il est facile d'en ajouter le cas échéant :

_fooS strF "%s is a %s language !" "Scol" :: "good" :: nil;    ->    Scol is a good language !

_fooS strF "%d + %d = %d" 3 :: 4 :: 7 :: nil;    ->    3 + 4 = 7

_fooS strF "J'ai un découvert de %f euros" 1254.25 :: nil    ->    J'ai un decouvert de 1254.25 euros

_fooS strF "La couleur choisie est : %x" 0x445522 :: nil;    ->    La couleur choisie est : 445522

Reste aussi à prendre en considération les valeurs liées à ces options : par exemple %.2f ppur n'afficher que 2 décimales aux flottants.

Offline

#8 5-Mar-2011 18:44:23

cyberfred
Member
From: Strasbourg
Registered: 15-Oct-2009
Posts: 30
Website

Re: Liste Scol et va_list

wouaw, cela me change du Java ^^

 ArrayList<String> mesString = new ArrayList<String>();

mesString.add("Canarie");

System.out.println(mesString.get(0)); 
// affiche sur la console le 1ier élement de la liste: Canarie
  

wink

Last edited by cyberfred (5-Mar-2011 18:57:04)


Kyle Macstone

Offline

#9 5-Mar-2011 21:58:25

iri
Admin. / Scol language & Scol apps developer
From: France
Registered: 22-Feb-2009
Posts: 2,024
Website

Re: Liste Scol et va_list

Cela me fait penser que j'ai corrigé depuis mais oublié de poster smile

strF et son alias sprintf permettent l'usage de chaînes formattées :

Prototype Scol :

fun [S u0] S

Les formats acceptés sont %d, %s, %x, %f standards (respectivement entier, chaine, hexa et flottant).
Le second argument doit être un tuple.

Par exemple :

typeof chaine = S;;
...
set chaine = sprintf "4 / 7 = %f" [4.0 /. 7.0];
_fooS chaine;
set chaine = sprintf "La prise de la %s eut lieu le %d %s %d à %s." ["Bastille" 14 "juillet" 1789 "Paris"];
_fooS chaine;

Sur les chaînes, j'ai codé quelques autres nouvelles fonctions :
strextrS, listextr, strfind2List, strfindAnyChar, strncat, strtruncate, _fooF, _fooFn, strreplace, strF, sprintf, printf.

Ainsi que les PCRE.

Offline

#10 5-Mar-2011 22:01:09

iri
Admin. / Scol language & Scol apps developer
From: France
Registered: 22-Feb-2009
Posts: 2,024
Website

Re: Liste Scol et va_list

cyberfred wrote:

wouaw, cela me change du Java ^^

 ArrayList<String> mesString = new ArrayList<String>();

mesString.add("Canarie");

System.out.println(mesString.get(0)); 
// affiche sur la console le 1ier élement de la liste: Canarie
  

wink

Oui, le C n'est pas particulièrement simplifié pour les chaînes ! Et Scol encore moins !
Ce n'est pas Nodrev qui me contredira !! lol

Offline

Board footer

Powered by FluxBB