Questions d'un futur (?) utilisateur...
steph_Rebol17-Mar-2010/8:10:03+1:00
Bonjour

J ai decouvert rebol il y a peu de temps et ai tres envie de me laisser tenter par l'aventure. Toutefois j aurais besoin de quelques infos afin de sauter le pas.


D abord ce que j aime dans rebol c est de partir d une feuille blanche, de tout coder à la main. C est idiot mais j ai 40 ans et ai decouvert la prog avec l amsatrd et depuis n ai toujours pas reussi à me faore qu concept objet.
Je developpe en amateur sous delphi...

Pourqoui vouloir tenter l aventure : L obligation de passer à une autre veron de delphi avec les pc en 64 bits (?), envie de glisser doucemnt sous linux, envie d apprendre vraiement à programmer à 40 ans...

Ce qui me déroute c est tous ces crochets...Mais bon je pense qu il faut oublier ce que je sais de delphi...

Alors j ai vu que rebol SDK etait à $50... Mais c est qoui rebol SDK exactement ?

Aussi une petite question pratique.
Je dois trier un tableau à deux entrée (position, valeur) suivant la valeur et calculer ensuite la difference entre la position reordonnée et la position initiale.
Sans pour autant me fournir le code exact, pourriez vous me donner un exemple car en delphi, on passe par un objet et je galere avec les objets (oui je sais je l ai dit plus haut)

Enfin, et pour terminer, j ai telecharger view et il y a un exemple qui reprend tous les 'composants' (dsl je connais pas la terminologie rebolienne) graphiques (boutons, grid, listes deroulantes...) mais impossible d en telecharger le code...

Voila

Merci pour vos réponses, conseils etc


stéphane
steph_Rebol17-Mar-2010/8:27:53+1:00
Une toute petite derniere question

la doc dispo ici http://www.rebol.com/docs/core-fr/fr-rebolcore-1.html est elle telechargeable au format pdf quelque part je n y suis pas parvenu...

Merci
Philippe17-Mar-2010/9:48:40+1:00
Bonjour et bienvenue,

Un nouvel utilisateur, c'est la fête !
Bon, pour répondre à tes questions :
- tu peux trouver le Pdf de la doc de Rebol2 (core) ici :
http://rebdocproj.net/category/Manuels

et d'autres docs encore en farfouillant sur le site.

- le SDK est le kit du développeur Rebol. Il contient notamment les compilateurs permettant de transformer un script Rebol en exécutable, même s'il existe d'autres moyens aussi.
- En général, pour view , il existe sur la Library Rebol.net pas mal d'exemples.
- pour l'exemple de tri, là pas d'idée comme çà, un peu plus de précision mais sort peut être ton ami ?
===Philippe
ldci17-Mar-2010/14:36:27+1:00
Salut
Moi aussi j'ai bcp developpé en Delphi et C++ avant de passer sous Rebol qui me sert pour tous mes projets depuis 2001 (sic!). Ne t'inquiète pas: ce que tu sais faire avec Delphi tu peux le faire (+ rapidement et mieux avec Rebol).
Concernant ton pb de tri, tu peux donner un peu plus de détail.
Bon code avec Rebol
Didec17-Mar-2010/15:31:27+1:00
Bienvenue Stéphane.

Pour ce qui est des crochets, ça peut faire ça au début. Mais après tout c'est pas pire que les ";" (combien de fois oublié !) du C ou de Javascript.
On s'y fait très vite, à condition de bien respecter la présentation de ton script (indentation). JE te conseille de suivre les recommandations du manuel à ce sujet.


Le SDK n'est plus vraiment essentiel. Du moins bien moins qu'avant, car la version View (gratuite) propose aujourd'hui des fonctionnalités jadis payante comme l'accès au Shell et aux DLLs.
L'intéret du SDK est pour la distribution de tes programmes : tu peux intégrer en un seul exécutable test scripts et la VM Rebol.
Comme Philippe l'a dit, il existe des alternatives, moins propres mais gratuites pour résoudre ce problème de distribution.

Sinon, il faut installer son script (ou l'ensemble de scripts) et View sur chaque poste.

Bref, ne te précipite pas à acheter avant d'avoir bien compris comment tout ça s'articule.


Pour cette histoire d'exemple qui ne marche pas, pourrais tu préciser où il se trouve et comment il s'appelle ?!


Et pour ton programme, un petit exemple simple de ce que tu as en entrée et ce que tu veux en sortie, ça peut nous aider à t'aider
steph_Rebol17-Mar-2010/22:22:06+1:00
Merci à vous pour ces reponses.

Concernant sdk, j ai pas l intention de distribuer dans l immediat () mais à terme oui donc pourqoui pas bien que je m etais dit que j attendrais bien la version 3...mais ça à l air de trainer un peu...

concernant le script que j arrive pas à telecharger j arrive plus non plus à lui mettre la main dessus mais des que je trouve, je poste.

Concernant mon pb, pour faire simple voici un tableau à deux dimensions

index 1 2 3 4
position 1 2 3 4
valeur 10 8 15 12

apres un tri croissant sur valeur j obtiens

index 1 2 3 4
position 2 1 4 3
valeur 8 10 12 15

Je souhaiterais faire la diff entre position et index, dans ce cas precis
2-1, 1-2, 4-3, 3-4

Dans l absolu je copie les valeurs initiales dans un autre tableau Tab' (index,valeur), je trie le tableau initial et je boucle sur les index du nouveau tableau trié, dans la boucle je recherche la valeur qui correspond à l index du tableau trié, j en retiens l index que je soustrais à l index de ma boucle initiale puis je passe la valeur dans Tab' à -1 car mes nombres sont tous positifs .
ça c est ce que je fais en delphi car je ne maitrise absolument pas le concept objet...

Voila, je me suis telechargé la doc en pdf (merci) et j attends qu ils reparent notre imprimante recto verso au boulot pour leur vider la cartouche et potasser tout ça...

merci pour votre accueil
guest218-Mar-2010/8:00:37+1:00
Ton tableau initial est une simple liste de valeurs.

>> T1: [10 8 15 12]

On commence par préfixer chaque valeur par son index dans le tableau (nombreuses façons de faire ça en Rebol, c'est parfois perturbant).

>> T2: repeat idx length? T1 [append append [] idx T1/:idx ]
== [1 10 2 8 3 15 4 12]

(T2 est une nouvelle liste)
Ensuite, il suffit de trier par valeur.
>> sort/skip/compare T2 2 2
== [2 8 1 10 4 12 3 15]

(la liste T2 a été modifiée).
Et pour finir on construit une nouvelle liste T3 en comparant l'index d'origine avec l'index courant (après le Trie)

>> idx: 0 T3: foreach [pos val] T2 [append [] pos - idx: idx + 1]
== [1 -1 1 -1]
steph_Rebol18-Mar-2010/9:17:30+1:00
C est bluffant!
tout ça en si peu de code !!!

Faut vraiment que je m y mette...

merci pour l exemple guest2
Didec18-Mar-2010/18:06:44+1:00
Eh oui, c'est le "Rebol power".

Attention toutefois !
Pour faire court, le code est simple et marche bien dans la console.
Mais il nécessite quelques modifs pour en faire une fonction réutilisable.

; déclaration d'une fonction faisant le calcul voulu
diff-position: func [data [block!] /local t1 t2 t3 idx pos] [
	t2: copy []
	repeat idx length? data [append append t2 idx data/:idx ]
	sort/skip/compare t2 2 2
	idx: 0
	t3: copy []
	foreach [pos val] t2 [append t3 pos - idx: idx + 1]
	; la valeur retournée par la fonction est celle retournée par 'foreach, c'est-à-dire le résultat du 'append, donc t3
]

; appel directe
diff-position [10 8 15 12 6 5 11]

; données à traiter
T1: [10 8 15 12]
; appel de la fonction en lui passant les données
diff-position T1

Là c'est pour tester dans la console (qui 'print le résultat), mais évidement, dans un programme complet on récupère le résultat de 'diff-position pour le traiter (genre: "res: diff-position t1")
guest218-Mar-2010/19:20:29+1:00
Voici une version un peu plus optimisée mais plus difficile à lire.

diff-position: func [data [block!] /local idx] [
   idx: 0
   head foreach
      [pos val]
      sort/skip/compare
         head repeat idx length? data [insert insert tail [] idx data/:idx ]
         2 2
      [insert tail [] pos - idx: idx + 1]
]




Just une remarque Didec, il n'est pas nécessaire d'initialiser les listes (avec copy []) avant d'entrer dans un foreach ou un repeat, car rappelons-le, c'est fonctions font un bind/copy du code à executer.
Traduis en français, ça veut juste dire que foreach et repeat font automatiquement un copy des blocks à l'initialisation. Ou autrement dit, une nouvelle "instance " de chaque block est récréée à chaque appel de foreach et repeat.
Didec18-Mar-2010/20:18:17+1:00
Ah, merci pour cette remarque Guest2, je n'y avais pas prêté attention.
Bon, c'est un peu "gourouesque" pour un débutant de la première heure, donc Steph, pas de panique, ça viendra en son temps !
shadwolf19-Mar-2010/8:52:26+1:00
DideC hum au bout d'une heure normalement en REBOL t'es un GURU nan ?

=^___^=
U
steph_Rebol20-Apr-2010/23:51:08+2:00
pour tout un tas de raisons j ai pas pu me connecter avant aujourd'hui.

Un grand merci pour vos réponses.
C est vrai que c est relativement court mais pas encore comprehensible pour moi d autant que j ai pas pu 'tapper dedans' car je dois terminer un projet delphi qui me prend la tête tant je l ai (la tête) à mon premier projet rebol...
coccinelle22-Apr-2010/8:43:30+2:00
Et pour le plaisir de voir que Rebol ça ne s'oublie pas, la même chose en 1 ligne :
>> r: for i 1 length? sort/compare t: [[2 8] [1 10] [4 12] [3 15]] 2 1 [append [] reduce [t/(i)/1 - i]]
== [1 -1 1 -1]
>> r
== [1 -1 1 -1]
>>
coccinelle22-Apr-2010/8:52:49+2:00
Et sous forme de fonction :
func [data [block!] /local i][
    return for i 1 length? sort/compare data 2 1 [append [] reduce [data/(i)/1 - i]]
]


J'aimais bien Rebol.

Amitiés à tous, Marco.
coccinelle22-Apr-2010/8:55:21+2:00
Zut, y'a même un return en trop :
func [data [block!] /local i][
    for i 1 length? sort/compare data 2 1 [append [] reduce [data/(i)/1 - i]]
]
coccinelle22-Apr-2010/8:58:14+2:00
Ainsi qu'un reduce, je suis mauvais :
func [data [block!] /local i][
    for i 1 length? sort/compare data 2 1 [append [] data/(i)/1 - i]
]
steph_Rebol22-Apr-2010/10:12:30+2:00
decidement, rebol c'est, pour un mec comme moi qui a decouvre, de plus en plus...bluffant !!!
JJV22-Apr-2010/14:37:14+2:00
Bonjour,

Samedi 24 Avril 2010 à 14h à La Cantine Paris.
il y a une rencontre autour de ce fabuleux langage, Bienvenue Rebol. Thèmes: codes et projets

Inscription
http://lacantine.org/events/welcome-rebol-2

Voila à bientôt

JJV
coccinelle22-Apr-2010/20:06:47+2:00
A mes yeux, Rebol est le seul langage où l'on comprend ce que fait un programme en lisant simplement le code.

Voici une autre version de la fonction de Didier avec quelques commentaire.
diff-position: func [data [block!] /local result][

 ; crée un copie pour ne pas altérer le block en entrée
    data: copy data

 ; transforme le block pour lui donner la structure [[index valeur][index valeur]...]
    forall data [change/only data reduce [index? data data/1]]

 ; trie le block sur la valeur
    sort/compare head data 2

 ; initialise le résultat
    result: copy []

 ; crée le réultat en soustrayant l'index initial à l'index une fois trié
    forall data [append result data/1/1 - index? data]
]


Un bout de code comme ça, tu dois y faire une modification 10 ans plus tard, c'est très facile.
guest223-Apr-2010/8:13+2:00
One-liner pour R3

>> data: [10 8 15 12]
>> head foreach [curr: item] sort copy data [change curr offset? curr find data item]
== [1 -1 1 -1]

Login required to Post.


Powered by RebelBB and REBOL 2.7.8.4.2