généricité

Le
Zeg
Salut,
Je souhaiterai implementer un algo de recherche dichotomique générique.
En fait je souhaiterai juste redéfinir la fonction ">".
Je crois savoir qu'il faut utiliser CallByName mais si quelqu'un un avit un
bel exemple ou explication, je serai ravi.

Tia
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Clive Lumb
Le #14713571
"Zeg" news:407ff569$0$491$
Salut,
Je souhaiterai implementer un algo de recherche dichotomique générique.
En fait je souhaiterai juste redéfinir la fonction ">".


Que ça ! Je crains que cela ne soit pas possible....

Je crois savoir qu'il faut utiliser CallByName mais si quelqu'un un avit


un
bel exemple ou explication, je serai ravi.


Je ne sais pas si CallByName marche avec les opérateurs VB.

Si mes souvenirs de cours sont bons, la recherche générique consiste à
trouver une valeur dans un tableau par écartement de moitiés successives -
je ne vois pas pourquoi il faudrait redéfinir le ">".

Plus d'explications stp ou peut être un "bel exemple". ;-)

Clive
Zeg
Le #14713531
Non ça c'est la recherche dichotomique où tu divises par 2 à chaque fois et
tu recommence dans la partie droite ou gauche selon le résultat de
l'opérateur de comparaison .
La recherche dichotomique n'a rien a voir en soit avec la généricité.
Par contre si tu veux faire une recherche dichotomique, ou autre, donc en
utilisant une fonction de comparaison sur tous type d'élément, c'est a dire
comparer des types enregistrements entre eux par exemple.
L' opérateur de comparaison "<" ">" marche tres bien pour les types Integer,
Long, String mais si tu veux travailler avec un type predefini personne ou
voiture.
Imagine que tu veux trier un tableau contenant n'importe quoi tu devras
redefinir l'opérateur de comparaison par surcharge
pour que tu puisses faire if voiture1 > voiture2 then...
L'idée est de pouvoir utiliser le même code pour différent type de données
que l'on précisera au moment de l'utilisation.
J'espere avoir été assez clair,
voicu un exemple d'utilisation
:http://www.irit.fr/ACTIVITES/EQ_SYNTHIM/personnel/gaildrat/public_html/page
s_html/Ada95/Ada95_Genericite.html

"Clive Lumb" de news: #

"Zeg" news:407ff569$0$491$
> Salut,
> Je souhaiterai implementer un algo de recherche dichotomique générique.
> En fait je souhaiterai juste redéfinir la fonction ">".
Que ça ! Je crains que cela ne soit pas possible....

> Je crois savoir qu'il faut utiliser CallByName mais si quelqu'un un avit
un
> bel exemple ou explication, je serai ravi.
Je ne sais pas si CallByName marche avec les opérateurs VB.

Si mes souvenirs de cours sont bons, la recherche générique consiste à
trouver une valeur dans un tableau par écartement de moitiés successives -
je ne vois pas pourquoi il faudrait redéfinir le ">".

Plus d'explications stp ou peut être un "bel exemple". ;-)

Clive




Patrice Henrio
Le #14713511
Je ne sais si on sait faire cela en VB mais c'est typiquement de la
programmation objet comme définie par exemple sous SmallTalk (ou même en
Lisp où la redéfinition de fonction est courante).
Je crois me souvenir que François avait évoqué le sujet une fois et je me
demande si la notion de transtypage n'est pas proche de ce que tu veux
faire.
En fait le problème ici est de ne pas perdre les définitions de "<" qui
existent déjà pour différents types de base.

Il faudrait donc stocker les adresses des routines.

Je me demande si avec un onError on ne pourrait pas faire quelque chose

Je n'ai pas testé mais voyons ...
Si l'erreur vient d'une opération type "a<b", je teste les types de a et b,
je regarde s'ils sont compatibles et j'applique une fonction inférieur(a,b)
adéquate.

"Zeg" news:408053fc$0$495$
Non ça c'est la recherche dichotomique où tu divises par 2 à chaque fois


et
tu recommence dans la partie droite ou gauche selon le résultat de
l'opérateur de comparaison .
La recherche dichotomique n'a rien a voir en soit avec la généricité.
Par contre si tu veux faire une recherche dichotomique, ou autre, donc en
utilisant une fonction de comparaison sur tous type d'élément, c'est a


dire
comparer des types enregistrements entre eux par exemple.
L' opérateur de comparaison "<" ">" marche tres bien pour les types


Integer,
Long, String mais si tu veux travailler avec un type predefini personne ou
voiture.
Imagine que tu veux trier un tableau contenant n'importe quoi tu devras
redefinir l'opérateur de comparaison par surcharge
pour que tu puisses faire if voiture1 > voiture2 then...
L'idée est de pouvoir utiliser le même code pour différent type de données
que l'on précisera au moment de l'utilisation.
J'espere avoir été assez clair,
voicu un exemple d'utilisation



:http://www.irit.fr/ACTIVITES/EQ_SYNTHIM/personnel/gaildrat/public_html/page
s_html/Ada95/Ada95_Genericite.html

"Clive Lumb" de news: #
>
> "Zeg" > news:407ff569$0$491$
> > Salut,
> > Je souhaiterai implementer un algo de recherche dichotomique


générique.
> > En fait je souhaiterai juste redéfinir la fonction ">".
> Que ça ! Je crains que cela ne soit pas possible....
>
> > Je crois savoir qu'il faut utiliser CallByName mais si quelqu'un un


avit
> un
> > bel exemple ou explication, je serai ravi.
> Je ne sais pas si CallByName marche avec les opérateurs VB.
>
> Si mes souvenirs de cours sont bons, la recherche générique consiste à
> trouver une valeur dans un tableau par écartement de moitiés


successives -
> je ne vois pas pourquoi il faudrait redéfinir le ">".
>
> Plus d'explications stp ou peut être un "bel exemple". ;-)
>
> Clive
>
>




Clive Lumb
Le #14713481
"Zeg" news:408053fc$0$495$
Non ça c'est la recherche dichotomique où tu divises par 2 à chaque fois


et
C'est ce que je voulais dire (ou taper) mes doigts on fourché.


L' opérateur de comparaison "<" ">" marche tres bien pour les types


Integer,
Long, String mais si tu veux travailler avec un type predefini personne ou
voiture.


Je vois bien le principe, mais surement le critère de supérieure, égale et
inférieure dépend de chaque type pour lequel il faut définir les règles et
avoir une table de connaissance complète pour chacun..
Pomme est supérieure à Orange parce qu'elle murit plus vite, Peugeot est
supérieure à Trabant parce qu'elle emploi plus d'ouvriers, Clive est
supérieur à Zeg parce que son nom est plus long ;-) etc.
Dans ce cas il faut attacher l'entrée approprié de la table de connaissances
au type et on dispose d'un valeur que l'on peut comparer numériquement dans
une fonction générique.

Clive
Patrice Henrio
Le #14713411
A ce niveau là, un type est défini à la fois par ses composants (les
propriétés ou les champs) et les méthodes : c'est ce que l'on appelle
couramment une classe. Donc il faut définir une fois pour toute ce que l'on
appelle "supérieur standard" pour le type utilisateur donné (cela peut-être
n'importe quoi) et soit définir un nouveau type pour une nouvelle définition
de supérieur, soit définir une nouvelle méthode mais qui ne pourrait pas
être branchée à partir de l'appel ">".
"25" est supérieur à "100" avec l'ordre lexicographique, mais dans ce cas
il s'agit de chaînes et non pas de nombres.

"Clive Lumb" de news:

"Zeg" news:408053fc$0$495$
> Non ça c'est la recherche dichotomique où tu divises par 2 à chaque fois
et
C'est ce que je voulais dire (ou taper) mes doigts on fourché.


> L' opérateur de comparaison "<" ">" marche tres bien pour les types
Integer,
> Long, String mais si tu veux travailler avec un type predefini personne


ou
> voiture.
Je vois bien le principe, mais surement le critère de supérieure, égale et
inférieure dépend de chaque type pour lequel il faut définir les règles et
avoir une table de connaissance complète pour chacun..
Pomme est supérieure à Orange parce qu'elle murit plus vite, Peugeot est
supérieure à Trabant parce qu'elle emploi plus d'ouvriers, Clive est
supérieur à Zeg parce que son nom est plus long ;-) etc.
Dans ce cas il faut attacher l'entrée approprié de la table de


connaissances
au type et on dispose d'un valeur que l'on peut comparer numériquement


dans
une fonction générique.

Clive




Publicité
Poster une réponse
Anonyme