90

Sally
: ça ressemble à quoi le prolog ?

abbreviations("M$","Microsoft").

qualites("Linux","super"). 
qualites("Microsoft","merde").

abbrev_qualite(A,B) :-
  abbreviations(A,_X),
  qualites(_X,B).

:- abbrev_qualite("M$",X).
% X = "merde".

:- abbrev_qualite(X,"merde").
% X = "M$".

:- abbrev_qualite(X,Y).
% X = "M$", Y = "merde".

:/- abbrev_qualite("Linux","merde").
% Aucune solution.

Quesoft
:
PpHd :
Oue mais le temps de compilation d'un projet C++

Delphi (objet pascal) est un langage OO et son compilateur bat à plat de couture la pluspart des compilos C.

Parce qu'il optimise très mal!
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é

91

abbreviations("M$","Microsoft").

qualites("Linux","super").
qualites("Microsoft","merde").

abbrev_qualite(A,B) :-
abbreviations(A,_X),
qualites(_X,B).

:- abbrev_qualite("M$",X).
% X = "merde".

:- abbrev_qualite(X,"merde").
% X = "M$".

:- abbrev_qualite(X,Y).
% X = "M$", Y = "merde".

:/- abbrev_qualite("Linux","merde"). % Aucune solution.


roll j'espère que tu n'as pas windows chez toi roll
avatar
<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)

<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant

92

si...roll
il y a fort à parier qu'il poste depuis IE même...tsss
avatar
Webmaster du site Ti-FRv3 (et aussi de DevLynx)
Si moins de monde enculait le système, alors celui ci aurait plus de mal à nous sortir de si grosses merdes !
"L'erreur humaine est humaine"©Nil (2006) // topics/6238-moved-jamais-jaurais-pense-faire-ca

93

Kevin > Si tu pouvais te passer de dire des conneries comme ça, ça serait sympa...
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

94

clair, si qqn en disait le centième sur TIGCC, kevin appellerait au ban sur 10 générations...
avatar
Webmaster du site Ti-FRv3 (et aussi de DevLynx)
Si moins de monde enculait le système, alors celui ci aurait plus de mal à nous sortir de si grosses merdes !
"L'erreur humaine est humaine"©Nil (2006) // topics/6238-moved-jamais-jaurais-pense-faire-ca

95

Ah là là vous comprenez rien à l'humour tripo

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

96

>Nitro: Si tu prends du C# par exemple, le compilateur du projet Mono est extrêmement rapide (et il est codé en C#).
>Quesoft: Delphi (objet pascal) est un langage OO et son compilateur bat à plat de couture la pluspart des compilos C.
Oui mais leve-t-il totalement l'abstraction de code pour faire une implantation correcte ?
De toute facon, je parle du C++, pas d'autres langages OO.

>Nitro: Le programme OO tu le compiles ça fait de l'assembleur. Si tu dis qu'on peut écrire une preuve pour l'asm, alors on peut aussi dans ce cas. Ou alors je n'ai pas compris.
Oui et non. La taille d'un projet standard C++ assemble + la taille de la bibliotheque standard C++ + la taille de l'implantation du C++ (Le code a genere pour les try/catch, et autres features) fait que ca devient intorchable. Deja que les preuves de 10 lignes font plus de 30 pages (Et elles etaient incompletes) sick.
Mais c'est surtout la programmation evenementielle le probleme (Faut prendre en compte les sources de l'OS!).

>Nitro: Je pense la même chose. Les applications d'aujourd'hui sont beaucoup plus grosses que celles d'avant, avec plus de fonctionnalités, et donc ça prend plus de temps à développer.
Oui et non. Pour un neophyte, il n'y a pas plus de fonctionnalites.

>Nitro: En ce qui concerne Doom 3, c'est surtout parce que c'est un terrain de jeu pour Carmack... comme pour Quake 1, il y aura dix fois plus de lignes de codes écrites pendant le développement que de lignes effectivement compilées dans l'exe à la fin.
A bon. Je croyais qu'il en avait marre de faire des jeux, et qu'il ne bossait plus vraiment dessus.
(NOTE: 10x de lignes ecrites que de celles effectivement compilees dans l'exe de fin me semble bien peu).

>Nitro: Moi j'ai passé l'age de croire qu'on peut le faire avec du C/C++. C'est beaucoup trop bas niveau.
On est d'accord.

>Quesoft: La programmation OO facilite le débuggage.
Je ne suis pas d'accord.

>Quesoft: Un surcroît d'abstraction nuit à la performance,
Je ne suis pas d'accord.

>Quesoft: ca reviens en terme de performance à de la POO
Je ne suis pas d'accord. Utiliser GMP en C ou en C++ n'est pas la meme chose (Pourtant ils ont vraiment bosse l'interface C++ pour qu'elle soit optimale!)

>Quesoft: On ne peut prouver qu'un programme est sans bug.
Si. Mais pas dans un langage de Haut Niveau ou abstrait. Seulement dans les langages tres bas niveau, comme l'assembleur, ou on tiend compte de
tout ce qui se passe.

>Quesoft:Au mieux, on peut prouver qu'il respecte parfaitement les spécifications (logique formelle), mais on ne peut prouver que les spécification sont correctement énoncées.
On n'a jamais prouve que les lemmes des maths etaient vrais.

>Quesoft: j'aimerais bien connaître le temps que ça prend pour faire la preuve formelle qu'un programme de la taille de DOOM3 codé en assembleur respecte les spécifications.
Joker.

>Quesoft: Un programme comme DOOM3 n'est pas en préparation depuis un bail parce qu'il est codé en C++, mais parce que c'est un immense projet
C'est pas le seul. C'est juste un exemple.
Troll powa!

97

Namespace Entreprise_Serieuse
    Structure Candidat
        Private _Name As String
        Private _Infos As String

        Public Sub New(ByVal Name As String, ByVal Infos As String)
            _Name = Name
            _Infos = Infos
        End Sub

        Public ReadOnly Property Name() As String
            Get
                Return _Name
            End Get
        End Property

        Public ReadOnly Property Infos() As String
            Get
                Return _Infos
            End Get
        End Property
    End Structure

    Class Embaucheur
        Public Shared Function Entretien(ByVal Candidat As Candidat) As Boolean
            If Candidat.Infos.IndexOf("M$") >= 0 AndAlso Candidat.Infos.IndexOf("merde") >= 0 Then Return False
            Return True
        End Sub
    End Class

    Class Siege_Social
        Shared Sub Main()
            Console.WriteLine("Dossier accepté: " + CStr(Embaucheur.Entretien(New Candidat("Kevin Kofler", "M$ = merde"))))
        End Sub
    End Class
End Namespace
trigic
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

98

Tiens ça ressemble à un langage de requêtes (à la SQL) alors ? (enfin, je veux dire que ça fait le même genre de trucs, pas que la syntaxe ressemble hein ^^)
-> tu mets des enregistrements dans des tables
-> ta fonction fait une jointure
-> ensuite tu fais des requêtes

Enfin bon peut-être que c'est ton exemple qui donne à penser ça et qu'en fait ça n'a rien à voir cheeky

(je réponds à Kevin, bien sûr)
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#

99

Kevin Kofler
: Parce qu'il optimise très mal!

Pourtant, le temps d'exécution des programmes Delphi accotent ceux en C++. J'ai pas fait de benchmark hyper poussé, remarque.

100

Quesoft > Mais ça doit dépendre pas mal du programme aussi. Il y a certain cas pour lesquels c'est quasi-certain que le C++ aura l'avantage, mais c'est sûr que dans les autres cas, ces deux langages sont plus ou moins équivalents.
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

101

Sally > C'est une façon de voir les choses, mais c'est pas vraiment exact... En fait, moi, quand je développais en Prolog, j'imaginais ça comme la construction d'un graphe. (Si tu veux plus d'infos, j'ai mon rapport de projet qui est en fait un bon départ pour l'initation au Prolog).
avatar

102

bah pourquoi pas ^^ (enfin c'est pas que j'aie l'intention de me mettre au prolog hein, mais c'est toujours intéressant)
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#

103

GoldenCrystal
: Quesoft > Mais ça doit dépendre pas mal du programme aussi. Il y a certain cas pour lesquels c'est quasi-certain que le C++ aura l'avantage, mais c'est sûr que dans les autres cas, ces deux langages sont plus ou moins équivalents.

Je te l'accorde.

L'Object Pascal, à part une systaxe vraiement chiante (c'est subjectif mais bon) est un langage semblable au C++ (hybride, présence d'un pré compilateur, etc.), mais c'est vrai, les performances dépendent des programmes.

104

C'est fou, tout ce que vous lisez dans un petit exemple débile de Prolog... 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é

105

C'est fou toutes les conneries que tu peux caser dans un petit exemple débile de Prolog.
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

106

pencil
avatar

107

Kevin Kofler
:
Delphi (objet pascal) est un langage OO et son compilateur bat à plat de couture la pluspart des compilos C.
Parce qu'il optimise très mal!

Assez bien quand même.
Si tu veux on prend un autre compilateur : GTC : il fait une optimisation très correcte, comparable à gcc -Os mais compile 15 fois plus vite...
Bon OK, on parlait des langages objets, mais je veux dire que le compilateur n'est pas toujours étranger à la lenteur, le langage compilé n'est pas forcément responsable.
avatar
Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 : www.ti-fr.com.
Quelques idées personnelles ici.

108

Merci Nil.
(je n'étais pas si loin en supposant que ça servait aux bdd relationnelles, donc, d'après l'intro)

Je vois que ça fait du... pattern matching love love
Ce langage m'a tout l'air d'être un des grands-papas de caml smile
tiens si ça t'intéresse, quand j'aurai le temps (ça devrait pas être long), je peux te transcrire tes exos sur les listes quasi tels quels en caml. Et l'algo de résolution du labyrinthe aussi vraisemblablement (pas toutes les parties interfaces, bien sûr) ^^
(en fait c'est presque déjà programmé en caml ^^ ya juste la syntaxe qui diffère)
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#

109

Huhu smile de rien happy
Bah pourquoi pas, je veux bien voir ce à quoi ça ressemble.
Tout ce qui est interfacier, c'est des ajouts spécifiques à chaque interpréteur (là, dans le cas du LPA Prolog, c'est +/- basé sur ceux du Turbo Prolog), donc c'est pas à proprement parler de la syntaxe Prolog (en fait, c'est des facilités d'utilisation).
Habituellement, on trouve le prolog interfacé avec un autre langage, ou, encore plus souvent, le prolog sert à faire des simulations et on retranscrit ensuite l'algo "déduit" de ce qu'on a fait en Prolog pour le porter dans un autre langage. Je sais qu'il y a d'ailleurs des classes C pour faire "comme du Prolog".
avatar

110

bon je te montre sur les deux premiers exemples :
(en caml la représentation des listes est en fait du type a :: (b :: (c :: [])), abrégée en [a; b; c] en l'occurrence, même principe avec une syntaxe différente quoi).
retournerliste:-
  retournerliste([a,b,c,d,e,f,g],[]).
retournerliste([],Nliste):-
  write(Nliste).
retournerliste([Tete|Corps],Nliste):-
  retournerliste(Corps, [Tete, Nliste]).

->
let retournerliste =
  let rec retournerliste = function
      ([], nliste) -> nliste
    | (tete :: corps, nliste) -> retournerliste (corps, tete :: nliste)
  in retournerliste ([`a; `b; `c; `d; `e; `f; `g], [])

bon en fait là j'ai utilisé des couples pour que ça ressemble le plus possible mais sinon j'aurais plutôt fait ça (je change l'ordre des arguments et je ne matche que le deuxième puisque de toute façon pour nliste c'est inutile) :
(c'est une fonction curryfiée, c'est à dire une fonction qui au premier argument associe une fonction du deuxième argument ; let rec indique que la définition est récursive et nliste est le premier argument.)
let retournerliste =
  let rec retournerliste nliste = function
      [] -> nliste
    | tete :: corps -> retournerliste (tete :: nliste) corps
  in retournerliste ([`a; `b; `c; `d; `e; `f; `g], [])

résultat :
# retournerliste;;
- : [> `a | `b | `c | `d | `e | `f | `g ] list = [`g; `f; `e; `d; `c; `b; `a]

(à gauche du signe = c'est le type, à droite c'est la valeur)

Deuxième exemple :
remplacerelement(Valeur, Base):-
  remplacerelement(Valeur,Base,[a,b,c,d,e,f,g],[]).
remplacerelement(Valeur, Base, [Base|Corps],Nliste):-
  remplacerelement(Valeur,Base,Corps,[Valeur,Nliste]).
remplacerelement(_, _, [],Nliste):-
  write(Nliste).
remplacerelement(Valeur, Base, [Tete|Corps], Nliste):-
  remplacerelement(Valeur,Base,Corps,[Tete,Nliste]).

->
let remplacerelement valeur base =
  let rec remplacerelement = function
      (valeur, base, re_base :: corps, nliste) when base = re_base ->
	remplacerelement (valeur, base, corps, valeur :: nliste)
    | (_, _, [], nliste) -> nliste
    | (valeur, base, tete :: corps, nliste) ->
	remplacerelement (valeur, base, corps, tete :: nliste)
  in remplacerelement (valeur, base, [`a; `b; `c; `d; `e; `f; `g], [])

Comme tu le vois, il y a une petite différence dans le premier pattern (utiliser deux fois le même identifiant ne marche pas, il faut faire en deux fois en mettant deux identifiants différents et une clause when), mais bon le principe est le même. smile
résultat :
# remplacerelement `t `c;;
- : [> `a | `b | `c | `d | `e | `f | `g | `t ] list =
[`g; `f; `e; `d; `t; `b; `a]

(si tu as des questions n'hésite pas ^^)
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#

111

L'Open Group n'y est pour rien. C'est un comité de standardisation de ISO. Et pas mal des nouveautés adoptées viennent des extensions de GCC à l'origine. Et pour les histoires du "fric", je te signale que les standards Open Group (Single Unix Specification et POSIX) sont désormais consultables gratuitement, donc tu accuses la mauvaise organisation. C'est ISO qui fait payer les standards! Cela dit, il y a des drafts du C99 qui circulent légalement (ISO permet la redistribution des drafts préliminaires).

Oki, c'est juste que ça me fait mal de devoir payer 100 $ pour le document Posix.1 et cher aussi pour Unix'03. sad
Le C99 apporte aussi pas mal de nouveautés qui ne sont pas dans le C++. Par exemple: les tableaux de taille variable, les constructeurs de style &(struct foo){1,2,3}, les long long, les types complexes intégrés, les fonctions inline etc. (toutes des extensions GNU à l'origine). Et aussi quelques nouveautés qui n'étaient ni du C++, ni du GNU C, par exemple les pointeurs _restrict (que les versions récentes de GCC gèrent, mais parce que c'est dans le C99, pas parce que c'était une extension GNU traditionnelle) et les constructeurs de structures variables, style &(struct foo){x,y,z} (là aussi géré par les versions récentes de GCC). Quant aux fonctionnalités héritées du C++, ils n'ont vraiment pris que les meilleures: Les commentaires // étaient gérés par pratiquement tous les compilateurs C depuis longtemps. Et les déclarations au milieu du code et les déclarations dans un for sont vraiment utiles.

Beurk! sick
Ca me gêne surtout qu'un langage comme le C ait tant changé depuis le K&R.
Le C évolue maintenant, alors que tout le monde pense savoir ce qu'est le C et qu'on a déjà conçu
des milliers de programmes.
Quand au C++, lui, ben on l'a oublié, pas d'évolution telle que celle-ci. Pas totalement logique... hum
Je suis tel la fleur du lotus.
Bien que naissant de la boue,
aucune boue n'y adhère.

112

As-tu deja programme en C K&R ?

113

Oui. Bon, j'abuserai pas, j'ai pas aimé, je reste au C89 (mais je ne passerai pas au C99, sauf si j'y suis forcé...)
Je suis tel la fleur du lotus.
Bien que naissant de la boue,
aucune boue n'y adhère.

114

C'était BCC... cry
Qqun d'autre y a touché au fait ? happy
(Association des KRoix)
Je suis tel la fleur du lotus.
Bien que naissant de la boue,
aucune boue n'y adhère.

115

Sally > Oui, je vois le principe... mais tu es quand même obligé de définir des variables ou des structures de type 'rec' (qui me font penser aux 'record' du Pascal smile) [let permet bien de définir une variable, non ?]... c'est en ça que je trouve que le Prolog est différent : il n'y a plus de notion de variable au sens strict du terme, il n'y a plus que des relations.

aze >
aimer(X, Y) :- aimer(Y, X)
aimer(moi, prolog)
(de mémoire, la dernière fois que j'y ai touché c'était il y a presque 4 ans cheeky).
avatar

116

euh let définit une « variable » oui mais le rec ça veut juste dire que la définition est récursive (c'est à dire que tu as le droit d'utiliser ce que tu es en train de définir à l'intérieur de la définition). Et en l'occurence tous mes let sont des définitions de fonctions (let f = function ...)
sinon je vois dans ton exemple (un autre) : « Ncupos is Pos +1, »
c'est bien une définition ça non ? pour moi c'est exactement l'équivalent d'un « let ncupos = pos + 1 in », donc il y a la même notion de « variable » (pas au sens strict du terme, certes).
Sinon la différence conceptuelle c'est bien sûr que je définis des fonctions et non des relations, mais la distinction ne me semble pas si nette (sux) que ça à vrai dire (enfin les fonctions sont un cas particulier de relations quoi...)
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#

117

La grosse différence est que la relation Prolog peut être utilisée dans les 2 sens, alors que ta fonction Caml ne peut être utilisée que dans un sens.
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é

118

Hum, bon, bon, enfin, quoi, bon, mais, euuuh, stop tongue
Ok... je pensais que le rec était comme en pascal record (types complexes utilisés pour les listes [Valeur|Pointeur])
Edit : c'est pour Sally, ce post hyper constructif cheeky
avatar

119

J'ai vu ce que c'était le prolog cette année, mais j'ai fait que 2 TP la dessus.
Mais ca peut servir à autre chose que démontrer des assertions ? par ce que je vois que certains manipulent des listes ... ?!?

120

Sally :
let retournerliste =
  let rec retournerliste nliste = function
      [] -> nliste
    | tete :: corps -> retournerliste (tete :: nliste) corps
  in retournerliste ([`a; `b; `c; `d; `e; `f; `g], [])


rliste [`a; `b; `c; `d; `e; `f; `g] []La dernière ligne, ça devrait pas être in retourne ? (copier coller sux tongue)
avatar
I'm on a boat motherfucker, don't you ever forget