1

J'ai DL CamL light et j'ai essayé de faire deux trois trucs que j'ai appris à la fac :

let x=5;;
if x=5 then x=2 else x=1;;
sick
quit;;

2

what
T'as appris à faire ça à la fac ? change de fac.
hum sinon quelle est ta question ?
1/ quit n'existe pas. C'est exit (0) (ou pas de 0 mais ça correspond à une erreur en principe).
2/ Tu es sûr que tu veux utiliser caml light et pas ocaml ? caml light est vieux, obsolète et lent. (et buggé je crois bien).
3/ = est une comparaison, pas une affectation.
4/ si tu fais let x = 5, tu déclares une constante. Pour faire une variable, c'est let x = ref 5, tu accèdes ensuite au contenu de la variable par !x et tu peux lui affecter une valeur avec :=
tu dois pouvoir trouver des tutos de caml via leur site http://caml.inria.fr si tu veux (probablement même qu'il y en a en français). Même sans faire de tuto, tu devrais au moins lire l'introduction du manuel, qui te décrit la syntaxe du langage... c'est utile de connaître la syntaxe, mine de rien.
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#

3

Sally
: 3/ = est une comparaison, pas une affectation.

sick Le let obligatoire, c'est comme dans les très vieilles versions de BASIC obsolètes depuis au moins 10 ans. roll
4/ si tu fais let x = 5, tu déclares une constante. Pour faire une variable, c'est let x = ref 5,

sick
tu accèdes ensuite au contenu de la variable par !x

Et avec ça, telchar veut encore me faire croire qu'il n'y a pas de symboles contre-intuitifs en Caml? roll
et tu peux lui affecter une valeur avec :=

En d'autres mots, il faut utiliser un autre opérateur pour les assignements (:=) que pour l'initialisation (let ... =). sick
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é

4

1>Bah, ué, c'est comme ça qu'ils voient le caml... Si ce que j'apprends est totalement faux, alors là je mepose des questions...

1, 3,4/ J'ai essayé de taper les trois sus-cités avec un test de concaténation de chaîne et il se trouve que ça a marché confus
2/ A la fac ils ont camL Light. On travaillera uniquement en mode interactif ce qui est une erreur pour moi, j'aurais aimé travailler en classique (compile et exécute).

Ma question c'est qu'est-ce qu'on peut faire comme prog abouti avec ce "langage" ?

5

Remarque ça dépend ce que tu veux faire après tout, ton code n'est pas faux (à part que quit n'existe pas)
en fait "if x = 5 then x = 2 else x = 1" est une expression valide de type booléen, qui est exactement équivalente à "x = 1" (donc en l'occurence ça vaut false).

Ce que ça dit précisément, c'est : si x vaut 5, alors renvoie-moi le booléen "x = 2", sinon renvoie-moi le booléen "x = 1".

Mais si c'est bien une affectation que tu voulais faire, alors il faut utiliser une référence et :=
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#

6

Bah en fait, j'ai tapé ces lignes au feeling juste pour me familiariser avec ce que je vais utiliser à la fac... Pour l'instant, c'est _un poil_ limité ce que je fais. Peut-être qu'avec le temps (Si j'ai le temps cheeky), ça viendra...

7

Sally> "quit" existe (au moins en Caml Light), mais pour l'appeler, c'est "quit()"

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

8

Kevin > dans les déclarations '=' n'est pas un opérateur, ça fait juste partie de la syntaxe de la déclaration.
let xxx = yyy
type xxx = yyy
class xxx = yyy
etc.
C'est très différent de l'affectation d'une valeur à une référence (où := est vraiment un opérateur). D'ailleurs x := 1 est une expression alors que let x = 1 n'en est pas une (c'est une déclaration).

naPO > 1/ peut-être que quit existe en caml light alors.

Sinon, pour tenter rapidement de répondre à ta question :
http://freshmeat.net/browse/983/
http://caml.inria.fr/users_programs-eng.html
(je sais pas dans quelle mesure c'est à jour, et c'est sûrement pas complet, mais bon...)
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#

9

Sinon ce qui existe (même en ocaml), c'est '#quit', mais ce n'est pas du caml, c'est une directive de l'interpréteur interactif (comme #load).
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#

10

Merci du conseil, je verrai ça ^^

Si j'ai écrit "quit", c'est parce que quand je ferme via la croix en haut à droite, caml écrit automatiquement quit();;...

Sinon, encore merci du conseil smile

11

Sally> non, quit() existe bien en Caml Light...

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

12

Je ne le nie pas cheeky
Sally
: naPO > 1/ peut-être que quit existe en caml light alors.
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#

13

sick Le let obligatoire, c'est comme dans les très vieilles versions de BASIC obsolètes depuis au moins 10 ans. roll

Etant donné que ce n'est pas le même usage, je ne vois pas très bien l'intérêt de ta remarque....triroll

S'il fallait bannir des langages modernes tous les mots utilisés dans les langages dépassés, je ne vois pas bien ce qui resterait...sick
Et avec ça, telchar veut encore me faire croire qu'il n'y a pas de symboles contre-intuitifs en Caml? roll

Où vois tu donc un symbole contre intuitif ?
C'est tout à fait semblable au * des pointeurs en C, et je suppose que tu trouves ce symbole merveilleusement naturel...
En d'autres mots, il faut utiliser un autre opérateur pour les assignements (:=) que pour l'initialisation (let ... =).

Dans la structure "let pattern = valeur", le "=" n'est pas un opérateur mais un simple mot de la syntaxe. (Mais Sally l'a déjà expliqué)

:=, par contre, est une fonction infixée du type 'a ref -> 'a -> unit
Les droits inaliénables du troll :
1) le droit d'avoir raison
2) le droit d'être péremptoire
3) le droit de ne pas lire
4) le droit de ne pas répondre
5) le droit d'être de mauvaise foi
6) Autant pour moi / Faignant / Vivent Tintin et Milou

14

Oui, je n'avais pas le temps de m'attarder sur tes trolls tout à l'heure, mais si utiliser '!' pour le déréférencement n'est certes pas particulièrement intuitif, je ne vois vraiment pas en quoi c'est *contre*-intuitif... c'est un symbole arbitraire, voilà tout... j'ajouterai que l'avantage qu'il a sur '*' est de ne rien signifier d'autre happy. C'est important puisqu'en caml, plutôt que de déduire des types des opérandes la nature de l'opérateur, le compilateur déduit de l'opérateur employé les types des opérandes, ce qui permet entre autres d'intercepter beaucoup plus d'erreurs bêtes et de les signaler avec des messages d'erreur bien plus clairs. Aucun opérateur n'a plusieurs significations.
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#

15

le caml c du caca grin
Yeah !

16

mézankor?
Les droits inaliénables du troll :
1) le droit d'avoir raison
2) le droit d'être péremptoire
3) le droit de ne pas lire
4) le droit de ne pas répondre
5) le droit d'être de mauvaise foi
6) Autant pour moi / Faignant / Vivent Tintin et Milou

17

or ce que dit montreuillois c'est du caca, donc montreuillois finira par se calmer
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

18

let slap = ref fun x -> x in
!slap "vince";;
• Hippopotame slaps "vince";; around a bit with a large trout !
Les droits inaliénables du troll :
1) le droit d'avoir raison
2) le droit d'être péremptoire
3) le droit de ne pas lire
4) le droit de ne pas répondre
5) le droit d'être de mauvaise foi
6) Autant pour moi / Faignant / Vivent Tintin et Milou

19

- : string = "vince"
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#

20

Et ça?

let a x y = y x in
let b x y = x y a in
let c x y = x b y in
let d x y = x y c in
let e x y = x d y in
let f x y = x y e in
f;;
Les droits inaliénables du troll :
1) le droit d'avoir raison
2) le droit d'être péremptoire
3) le droit de ne pas lire
4) le droit de ne pas répondre
5) le droit d'être de mauvaise foi
6) Autant pour moi / Faignant / Vivent Tintin et Milou

21

Aucun opérateur n'a plusieurs significations.

prefix <;;
- : 'a -> 'a -> bool = <fun>

Ca n'a qu'une seule signification happy

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

22

En effet, ça n'a qu'une signification! cheeky
Les droits inaliénables du troll :
1) le droit d'avoir raison
2) le droit d'être péremptoire
3) le droit de ne pas lire
4) le droit de ne pas répondre
5) le droit d'être de mauvaise foi
6) Autant pour moi / Faignant / Vivent Tintin et Milou

23

Hippohmu
: C'est tout à fait semblable au * des pointeurs en C, et je suppose que tu trouves ce symbole merveilleusement naturel...

Je n'ai pas besoin de déréférencer un pointeur pour accéder à une variable (non-constante) en C!
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é

24

En Caml non plus.
Les droits inaliénables du troll :
1) le droit d'avoir raison
2) le droit d'être péremptoire
3) le droit de ne pas lire
4) le droit de ne pas répondre
5) le droit d'être de mauvaise foi
6) Autant pour moi / Faignant / Vivent Tintin et Milou

25

Hippohmu :
Et ça?

let a x y = y x in
let b x y = x y a in
let c x y = x b y in
let d x y = x y c in
let e x y = x d y in
let f x y = x y e in f;;

- : ('a -> (((('e -> (((('i -> ('k -> ('k -> 'l) -> 'l) -> 'j) -> 'i -> 'j) -> 'g -> 'h) -> 'g -> 'h) -> 'f) -> 'e -> 'f) -> 'c -> 'd) -> 'c -> 'd) -> 'b) -> 'a -> 'b = <fun>
chapo
Kevin > je ne vois pas le rapport avec ta remarque précédente, mais c'est effectivement une des innombrables différences entre le caml et le C : si tu veux pouvoir modifier une variable, il faut utiliser une référence ou un champ mutable d'une structure.
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#

26

"Tout est référence." == "Tout est lent." sad
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é

27


Dans un langage fonctionnel pur, il n'y a aucun effet de bord. En particulier, on ne peut pas affecter une valeur à une variable après sa déclaration (et donc il n'y a pas de variables, seulement des constantes).

Caml est un langage fonctionnel impur : pour des raisons de commodité, on autorise certains effets de bord. Toutefois, les variables restent toutes constantes, et ne peuvent pas être réaffectées. Si on veut une variable qui puisse "varier", ce doit être une référence (c'est à dire grosso modo un pointeur : le pointeur est constant, mais la valeur qu'il pointe ne l'est pas), ou bien un champ mutable.

Bien sûr, Kevin, qui est hermétique à tout style de programmation qui s'écarte du pur impératif, va trouver ça dément.smile
Les droits inaliénables du troll :
1) le droit d'avoir raison
2) le droit d'être péremptoire
3) le droit de ne pas lire
4) le droit de ne pas répondre
5) le droit d'être de mauvaise foi
6) Autant pour moi / Faignant / Vivent Tintin et Milou

28

Mais non Kevin, 1/ les benchs montrent que tout n'est pas lent, même si évidemment c'est *légèrement* plus lent que du C et aussi plus lent que de l'asm, c'ets plus rapide que pratiquement tout le reste, et 2/ tout n'est pas référence, tu ne t'en rends peut-être pas compte à cause de tes habitudes de programmeur C mais on n'a pas si souvent que ça besoin de variables modifiables ! (et les boucles for sont une construction particulière qui n'utilise pas de références). Et puis en C aussi, tout ce qui n'est pas numérique est référence (ce n'est pas *obligatoire* mais bon en gros c'est ça).
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#

29

25>

1) Pourquoi tout serait référence? confus On en a besoin d'assez peu, sur la totalité des variables.

2) Non, ça n'est pas lent.






J'oubliais aussi que les structures comme for ... = ... to ... do ... done s'autorisent à modifier une variable.
Les droits inaliénables du troll :
1) le droit d'avoir raison
2) le droit d'être péremptoire
3) le droit de ne pas lire
4) le droit de ne pas répondre
5) le droit d'être de mauvaise foi
6) Autant pour moi / Faignant / Vivent Tintin et Milou

30

Une petite remarque en passant : il existe une construction syntaxique spéciale pour la boucle for car elle est souvent utilisée, mais il est intéressant de voir que
for i = 0 to n do <expr> done

est parfaitement équivalent à
let rec boucle i = (if i <= n then <expr>; boucle i + 1) in boucle 0

et que cette deuxième version n'utilise pas davantage de référence happy

D'ailleurs imaginons que Kevin râle en disant que quand même, en C, on a un truc plus souple avec la syntaxe for (initialisation; condition; incrémentation) (syntaxe àmha débile en ce qu'elle permet les pires abus, mais là n'est pas la question). Eh bien en caml on peut faire ceci (tiens je vais mettre des arguments optionnels tant qu'à faire, hystoire de se rapprocher vraiment du for du C... bon c'est carrément un gadget inutile en l'occurrence mais c'est pas grave cheeky) (attention les args optionnels n'existent pas en caml-light ^^) :
let boucleforalaC ~init ?(cond = function _ -> true) ?(incr = function x -> x) body =
  let rec do_boucle i = (if cond i then body i; do_boucle (incr i)) in do_boucle init

et je précise que la variable de boucle i peut être *n'importe quoi*, si on veut ça peut être un triplet d'un nombre, un booléen et une liste par exemple cheeky
Vous voyez bien que la conclusion s'impose : caml powa.

Ah oui, et je re-fais remarquer que je n'ai pas utilisé une seule référence dans ma fonction happy²
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#