30

Tu fais une récurrence sur les caractères... (pour contourner les boucles conditionnelles... enfin ça ne rime vraiment à rien)
Si le caractère initial est -, il est inférieur. Fini.
Si le caractère est 0 on regarde le suivant jusqu'à != 0 ou la fin. A la fin on sait que le nombre est <= 10
Si le caractère est != 0 on regarde juste si le suivant est aussi, dans ce cas le nombre est > 10.

A chaque fois tu dois faire une comparaison sur les caractères ">= '0'", "<= '9'" aussi mais bon... Logique combinatoire... ça se fait.

Et quand tu propose de supprimer carrément touts les opérateurs logiques... ça se contourne également, mais ça devient vraiment lourd... Tu veux aussi interdire les additions du coup non ? tongue
Sinon pointeurs de fonction = fonctions virtuelles. Soit il dit en passant c'est super lent en réalité (a plus forte raison si tu en as beaucoup, et dans ton cas c'est inévaitable, car à ce moment la la taille de ton éxécutable augmente énormément pour contenir chacune des mini fonctions qui en apelle d'autres etc..., donc tu utilises presque jamais le cache du cpu), et ça s'optimise très peu pour ne pas dire "pas du tout".

Et les "if" dissimulés dans les handles non. Y'a pas de handle pas de machin. A un moment en implémentant TON language, dans TES librairies codées avec TON langage tus eras OBLIGE de faire un if, que ce soit pour tester un HANDLE, un pointeur de classe externe, un ID de controle, ou des coordonnées de souris.

Normalement tu peux résumer la grande majorité des programmes non systèmes (donc pas besoin vital de manipuler des champ de bits) à 3 opérations: addition, comparaison, branchement. Toi tu propose de supprimer "comparaison".
L'utilisateur de donne deux entiers a et b, te demande lequel est le plus grand. Tu as interdit opérations logiques, tests conditionnels et compagnie... Tu fais quoi ?

C'est pas viable wink
avatar
Le scénario de notre univers a été rédigée par un bataillon de singes savants. Tout s'explique enfin.
T'as un problème ? Tu veux un bonbon ?
[CrystalMPQ] C# MPQ Library/Tools - [CrystalBoy] C# GB Emulator - [Monoxide] C# OSX library - M68k Opcodes

31

Je pense fortement (même si je n'ai pas de démonstration) que ce que tu proposes (n'autoriser que le polymorphisme comme structure de contrôle) donne un langage qui n'est plus Turing-complete, et qui est même très très limité en expressivité. Donc forcément, toutes les réactions que tu reçois, ce sont des propositions pour contourner cette limitation absurde (en utilisant d'autres structures de contrôle, que du coup tu proposes d'interdire aussi, ce qui fait qu'il ne reste plus quasiment rien => langage incomplet).
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

32

Oui. Mais autrement, on a un langage trop complet, deux façons d'utiliser le langage pour faire la même chose (cf ./1) . Si on élimine la notion de polymorphisme, on retombe sur un langage classique non-OO, je voulais voir ce qui se passerait si on éliminait l'autre. Après, que des hacks existent pour simuler le if, ca me dérange pas. On hack bien le C par exemple pour simuler des espèce de try ou je ne sais quoi. Ce qui fait le caractère du langage, ce sont les règles qu'il impose au départ, après les gens pourraient ne pas suivre la "logique" du langage, tout comme ils pourraient ne pas jamais utiliser private en C++ par exemple.
Tout ce qui passe pas par le port 80, c'est de la triche.

33

Pas besoin de ne pas l'utiliser, il y a aussi #define private public et #define protected public, et g++ a aussi un flag -fno-access-control. grin
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

34

Oui voilà. Y a ce qu'un langage conseille de faire, y a ce qu'un langage permet de faire. Faut pas mélanger les deux notions.
Tout ce qui passe pas par le port 80, c'est de la triche.

35

%%%%%%%%%%%%%%%%%%%%	get_mot(Ligne,M,I,Len)	%%%%%%%%%%%%%%%%%%%%
%
% Cherche un mot M de longueur Len dans une liste a partir de l'indice I
%
get_mot([_|Q],M,I,Len):- J is I-1, get_mot(Q,M,J,Len).
get_mot(_,[],1,0).
get_mot([T|Q],[T|QQ],1,Len):- Len2 is Len-1, get_mot(Q,QQ,1,Len2).
trilove
avatar
納 豆パワー!
I becamed a natto!!!1!one!

36

C'est quoi ce langage que j'en fasse jamais ? grin
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

37

Prolog.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

38

Arf je kiff le Prolog et le LISP. ^^
avatar
la Nature nous montre seulement la queue du lion. Mais je suis certain que le lion a qui elle appartient pense qu'il ne peut pas se révéler en une fois en raison de son immense taille.

- Fondateur de Ti-Gen -: http://www.tigen.org

- Membre du Groupe Orage Studio -: http://oragestudio.free.fr/

- Mon site perso -: http://tisofts.free.fr

Projets TI68K en cours:
GFA-Basic = http://www.tigen.org/gfabasic
Arkanoid.
PolySnd 3.0.

39

Pour la programmation sans if, perso je ne vois que des alternatives liées à l'intelligence artificielle. Algorithmes génétiques, réseaux de neurones formels, réseaux sémantiques voir même systèmes expert. Mais bon c'est fait que pour des programmes spécifiques.
avatar
la Nature nous montre seulement la queue du lion. Mais je suis certain que le lion a qui elle appartient pense qu'il ne peut pas se révéler en une fois en raison de son immense taille.

- Fondateur de Ti-Gen -: http://www.tigen.org

- Membre du Groupe Orage Studio -: http://oragestudio.free.fr/

- Mon site perso -: http://tisofts.free.fr

Projets TI68K en cours:
GFA-Basic = http://www.tigen.org/gfabasic
Arkanoid.
PolySnd 3.0.

40

ouais.

Je tourne ma question autrement. Que se passerait si on programmait dans un langage comme C++ en se forçant à ne pas utiliser de "if" ?
Tout ce qui passe pas par le port 80, c'est de la triche.

41

Un aurait à peu près un point d'interrogation par ligne (cf. ./12). gni
Désolé de te décevoir, mais le polymorphisme ne peut pas remplacer les structures de contrôle de base.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

42

geogeo (./39) :
Pour la programmation sans if, perso je ne vois que des alternatives liées à l'intelligence artificielle. Algorithmes génétiques, réseaux de neurones formels, réseaux sémantiques voir même systèmes expert. Mais bon c'est fait que pour des programmes spécifiques.

tu nous ressorts les cours de IA01 tant que tu y est ? trigic
avatar
納 豆パワー!
I becamed a natto!!!1!one!

43

onur > Comment tu "polymorphiserais" le programme suivant ?

a = readNumberFromUser()
b = readNumberFromUser()
if a == b then print "Gagné" else print "Perdu".

Tous les tests ne sont pas assimilable à des tests de type ...
avatar
I'm on a boat motherfucker, don't you ever forget

44

onur (./29) :
Pour être honnete, y a une question à laquelle j'arrive pas à répondre. Comment faire un programme qui prend un entier écrit au clavier et qui dit si le nombre est supérieur à 10 ?


Tout ce qui passe pas par le port 80, c'est de la triche.

45

ben pour ça tu peux encore te démerder, avec un type "nombre inférieur à 10", et un autre type "nombre supérieur à 10" ... mais dans le cas du ./44, on ne peut pas faire comme ça.
avatar
I'm on a boat motherfucker, don't you ever forget

46

dualmoo (./45) :
ben pour ça tu peux encore te démerder, avec un type "nombre inférieur à 10", et un autre type "nombre supérieur à 10" ...

Non, parce que tu ne peux pas savoir quel type instancier sans if.
mais dans le cas du ./44, on ne peut pas faire comme ça.

C'est exactement le même cas, tu aurais un type "paire de nombres égaux" et un type "paire de nombres différents", mais là encore, comment choisir le type à instancier sans if? (Avec du ?: ternaire? gni)
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

47

On pourrait lancer des exceptions
Tout ce qui passe pas par le port 80, c'est de la triche.

48

et d'une maniere ou d'une autre tu ferras des If ou autres tests du meme genre
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

49

ouais mais conceptuellement une exception c'est pas pareil qu'un if. Meme si ca fait bien un saut au niveau du processeur.
Tout ce qui passe pas par le port 80, c'est de la triche.

50

donc tu va generer 300Ko de code la ou a pein 500o aurient suffit top
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

51

la taille de l'executable et les performances ne m'intéressent pas. là on fait de la philo.
Tout ce qui passe pas par le port 80, c'est de la triche.

52

onur (./47) :
On pourrait lancer des exceptions

Donc si j'ai bien compris, tu proposes de faire ça?
NumberPair *p;
try {
 p = new DifferentNumberPair(a,b);
} catch () {
 p = new SameNumberPair(a,b);
}

avec:
DifferentNumberPair:: DifferentNumberPair(int a, int b)
{
  1/(a-b);
  m_a = a;
  m_b = b;
}

?

En voilà une manière tordue de faire un if. gni
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

53

./46 > c'est vrai
avatar
I'm on a boat motherfucker, don't you ever forget

54

hmmm... pas mal smile

mais bon, c'est quand même pas super comme truc, le programmeur va avoir tendance à faire ça pour chaque test d'égalité sad
déjà une chose est sûre, la syntaxe devrait être beaucoup plus simple pour ce genre de choses.
Tout ce qui passe pas par le port 80, c'est de la triche.

55

De toutes façons quoique tu fasses pour passer de concept "concret" (nombres, ...) à concept "abstrait" (classes, ...) tu dois forcément faire un if.
Une condition c'est une vue de l'esprit. Tu peux la cacher dans un tableau précalculé, dans un polymorphisme fait pour, tu peux inventer tout les trucs tordus que tu veux. Mais conceptuellement ton cerveau remet tout a plat avec des conditions.
Au fond la différence est où ? Le if n'est plus dans ton langage mais dans ta tête, et par dessus le marché du dois faire un boulot supplémentaire pour contourner l'abscence du if en tant que tel dans le langage. Au final il n'y sera pas textuellement mais conceptuellement.

De la façon dont je voit ça, les langages ont tendance à évoluer de la façon de fonctionner de la machine (assembleur) vers un raisonnement humain (langage fonctionnels, puis objet). Seulement le concept objet est bati, par des humains qui plus est, sur les concepts précédents. De ce fait les langages héritent malgré eux des capacités du(des) langage(s) qui les ont précédé, avec les effet néfastes qu'on connait. (Possibilité de programmer en procédural avec langage objet, pointeurs en C++, ...).
Toujours sur le même raisonnement, peut être un peu plus détaillé, tu peux voir par exemple dans une vision "simpliste" => (ASM, C, C++) d'une partie de l'évolution des langages, que chaque langage apporte des concepts qui sont une *extension* de concepts précédents.
De LABEL + TEST + JUMP en ASM, on passe à des structures de controles en C (langage structuré, le cerveau s'y retrouve plus facilement), puis de structures (sans rapport direct avec les structures de contrôle) en C, tu passes à des classes en C++ (les objets décrits peuvent avoir leur propre "façon d'être", c'est également plus proche du raisonnement humain).
On arrive donc a des concepts bien plus évolués qui utilisent toujours les concepts de base.
C'est un peu comme quand tu construis une tour, tu met les fondations (ASM) avant de mettre les premiers murs (C), puis tu rajoutes un étage (C++), et tu continues tant que tu peux.
En fait toi tu veux retirer les fondations. Je pense que l'image est assez claire.
avatar
Le scénario de notre univers a été rédigée par un bataillon de singes savants. Tout s'explique enfin.
T'as un problème ? Tu veux un bonbon ?
[CrystalMPQ] C# MPQ Library/Tools - [CrystalBoy] C# GB Emulator - [Monoxide] C# OSX library - M68k Opcodes

56

D'ailleurs, ça (./52) ne va pas marcher avec les compilateurs C++ actuels (la division par 0 n'est pas convertie en une exception C++), il faudrait une sémantique style Java pour les divisions par zéro pour que cette solution fonctionne.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

57

Et comment tu ferais pour trier une liste de, mettons, deux éléments ? cheeky
avatar
« Le bonheur, c'est une carte de bibliothèque ! » — The gostak distims the doshes.
Membrane fondatrice de la confrérie des artistes flous.
L'univers est-il un dodécaèdre de Poincaré ?
(``·\ powaaaaaaaaa ! #love#

58

try {
  sqrt(a-b);
  // a>=b
} catch(ArithmeticException) {
  // a<b
}

grin
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

59

et comment tu codes la fonction sqrt ?
avatar
Le scénario de notre univers a été rédigée par un bataillon de singes savants. Tout s'explique enfin.
T'as un problème ? Tu veux un bonbon ?
[CrystalMPQ] C# MPQ Library/Tools - [CrystalBoy] C# GB Emulator - [Monoxide] C# OSX library - M68k Opcodes

60

./55 Oui pas mal comme exemple.

Moi l'idée de base était: plutôt que ca soit le mec de la préfecture qui dise aux étranger d'aller au bureau 123, aux renouvelleurs de carte grise au bureau 849, c'est que eux savent où aller avec Etranger.allerAuGuichet(); Conducteur.allerAuGuichet();
tout revient à déplacer le code. Intuitivement, on sent que c'est possible (cf ./1) mais ca peut aussi vite devenir le bordel sans avoir de justification au niveau conceptuel du logiciel (cf ./52).
Tout ce qui passe pas par le port 80, c'est de la triche.