Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
4794 connectés 

 


 Mot :   Pseudo :  
 
 Page :   1  2  3
Auteur Sujet :

[Topic Unique] Caml

n°1199737
WhatDe
Posté le 14-09-2005 à 21:55:54  profilanswer
 

Reprise du message précédent :
Un 2ème chrisbk [:totoz]


---------------
[:whatde]
mood
Publicité
Posté le 14-09-2005 à 21:55:54  profilanswer
 

n°1199738
chrisbk
-
Posté le 14-09-2005 à 21:56:18  profilanswer
 

Spoiler :

on devrait te faire bouffer tes couilles en salade

n°1199739
chrisbk
-
Posté le 14-09-2005 à 21:56:43  profilanswer
 

WhatDe a écrit :

Un 2ème chrisbk [:totoz]


ptain mais nan, tu vois bien qu'il aime le C

n°1199751
jesus_chri​st
votre nouveau dieu
Posté le 14-09-2005 à 22:06:03  profilanswer
 

WhatDe a écrit :

Un 2ème chrisbk [:totoz]

n'ai pas peur, j'aime bcp le C, il n'y a qu'un chrisbk. Mais je suis d'accord sur le fait que qsort soit pas top-top en C. Enfin il ont été sympa de le mettre parce qu'il me semble que c'est le seul algo générque en C ANSI.

n°1200317
frodon131
Mon précieux
Posté le 15-09-2005 à 12:43:41  profilanswer
 

up

n°1200330
skeye
Posté le 15-09-2005 à 13:17:21  profilanswer
 

Mais non, pas up.:o


---------------
Can't buy what I want because it's free -
n°1200331
frodon131
Mon précieux
Posté le 15-09-2005 à 13:19:06  profilanswer
 

skeye a écrit :

Mais non, pas up.:o


Viens pas polluer :non:  

n°1200332
skeye
Posté le 15-09-2005 à 13:20:54  profilanswer
 

frodon131 a écrit :

Viens pas polluer :non:


Je viens pas polluer, je te demande de ne pas upper ce topic pour rien. Il n'a pas plus de raison d'être en première page qu'un autre.:o


---------------
Can't buy what I want because it's free -
n°1200725
el muchach​o
Comfortably Numb
Posté le 15-09-2005 à 22:01:01  profilanswer
 


Si on en croit les benchs, il est méchamment optimisé le compilo Digital Mars.  :pt1cable:

n°1200728
masklinn
í dag viðrar vel til loftárása
Posté le 15-09-2005 à 22:08:01  profilanswer
 

el muchacho a écrit :

Si on en croit les benchs, il est méchamment optimisé le compilo Digital Mars.  :pt1cable:


Qui se craque pour le tester et dire aux autres si ils devraient passer au D ?


---------------
I mean, true, a cancer will probably destroy its host organism. But what about the cells whose mutations allow them to think outside the box by throwing away the limits imposed by overbearing genetic regulations? Isn't that a good thing?
mood
Publicité
Posté le 15-09-2005 à 22:08:01  profilanswer
 

n°1200785
el muchach​o
Comfortably Numb
Posté le 16-09-2005 à 07:32:42  profilanswer
 

Les jeux de shoot ci-dessous sont écrits en D avec la SDL.
http://www.asahi-net.or.jp/~cs8k-cyu/index_e.html
 
J'ai essayé Torus Trooper, c'est pas mal (touches flèches et W ou X pour tirer et commencer la partie) et gunroar. De bons shooter. Le source (absolument pas commenté, comme il se doit) est inclus dans le download.
 
Y'a pas à dire, ça a l'air d'être du sérieux, ce langage.  :jap:


Message édité par el muchacho le 16-09-2005 à 08:08:14
n°1200791
masklinn
í dag viðrar vel til loftárása
Posté le 16-09-2005 à 08:30:49  profilanswer
 

Oui, je connais Torus Trooper et Tumiki Fighter (TF est 'achement bien, extrèmement original)


---------------
I mean, true, a cancer will probably destroy its host organism. But what about the cells whose mutations allow them to think outside the box by throwing away the limits imposed by overbearing genetic regulations? Isn't that a good thing?
n°1200824
chrisbk
-
Posté le 16-09-2005 à 09:23:33  profilanswer
 

ca fait 2 ans que je vous dit que le D ca tape

n°1200827
chrisbk
-
Posté le 16-09-2005 à 09:26:29  profilanswer
 

par contre l'api est toujours aussi mauvaise

n°1201448
babarthesu​rfer
Posté le 17-09-2005 à 03:57:13  profilanswer
 

Es ce que quelqu'un peu me donner des conseils:
 
Je suis sous netBSD et je voudrai coder en camel avec un sub shell. Pour voir mes elaluations dans un shell et non pas a la suite du code.
Je sais que emacs peu le faire avec un certain mod tuareg... mais je n'arrive pas a l'utiliser....... quelqu'un sait-il comment? il y a peu etre une subtilite dans tuareg.....?


Message édité par babarthesurfer le 17-09-2005 à 03:57:30
n°1201455
Flaie
Posté le 17-09-2005 à 08:45:00  profilanswer
 

Bah pour tuareg tu met les fichiers *.el que tu as téléchargé dans un dossier (celui que tu veux ça doit pas poser de problème, dans /site-lisp/ par exemple).
 
Et puis dans ton .emacs tu met :

Code :
  1. (setq auto-mode-alist (cons '("\\.ml\\w?" . tuareg-mode) auto-mode-alist))
  2. (autoload 'tuareg-mode "tuareg" "Major mode for editing Caml code" t)
  3. (autoload 'camldebug "camldebug" "Run the Caml debugger" t)
  4. ;;; je sais plus si cette partie est obligatoire
  5. ;;; je la met quand même au cas où
  6. (if (and (boundp 'window-system) window-system)
  7.     (when (string-match "XEmacs" emacs-version)
  8.       (if (not (and (boundp 'mule-x-win-initted) mule-x-win-initted))
  9.           (require 'sym-lock))
  10.       (require 'font-lock)))


 
Si tu as mis les *.el dans un dossier bien à part il faudra surement l'ajouter au load-path.
 
Moi j'ai toutes mes extensions que j'ai ajouté (pas les c-mode et compagnie) sur windows dans C:/.emacs.d/ext/ et sous linux dans /home/user-login-name/.emacs.d/ext/ :

Code :
  1. (if (string-equal "windows-nt" system-type)
  2.    (setq load-path (cons "C:/.emacs.d/ext/" load-path))
  3.    (setq load-path (cons
  4.           (concat
  5.                  (concat "/home/" user-login-name) "/.emacs.d/ext/" )
  6.                  load-path))
  7.   )


 
Après si tout se passe bien quand tu ouvre un fichier *.ml alors dans les menu du haut tu devrais en avoir un nommé Tuareg, et si tu fait C-c C-b puis Return, ça devrait évaluer le buffer et te mettre le resultat dans un nouveau buffer en dessous.

n°1201483
le_courtoi​s
Posté le 17-09-2005 à 11:54:20  profilanswer
 

Bonjour,
  Vouloir faire un tuto reste tout de même une bonne initiative, mais nécessite beaucoup de boulot. N'hésite pas à mettre des exemples pour vulgariser le texte et aider à la compréhension de ceux-ci. Mais bon, j'ai pas trop de conseils à donner, je ne suis pas expert.
  Par contre, j'ai trouvé ça : http://webperso.easyconnect.fr/goutelle/CAML.htm
 Peut-être cela t'intéressera ?
Courage.


Message édité par le_courtois le 17-09-2005 à 11:55:08
n°1201785
frodon131
Mon précieux
Posté le 18-09-2005 à 12:15:47  profilanswer
 

dsl si le tuto avance lentement j'ai peu de temps a y consacrer je suis en prepa MP

n°1202028
nraynaud
lol
Posté le 19-09-2005 à 00:28:27  profilanswer
 

c'est sympa les topics-bisounours [:dawa].
 
C'est un langage marrant, qui commence à prendre un peu dans les usines. J'ai un pote qui fait du calcul formel (pour l'industrie) avec ça.
 
le caml a aussi des inconvénient non-négligeables : les types faibles (avec l'underscore) qui sont une chierie à expliquer aux débutants, une grammaire bloat à cause de la croissance des fonctionnalités au départ (notatoin objet, variants, paramètres optionnels etc.) avec P4 et grammaire révisée ça va mieux.  
 
Enfin il ne faut pas oublier que le but de caml n'est pas la perf (l'unique objectif est "jamais pire que 2 fois plus lent que le C), et qu'il a été décidé que certains efforts d'optimisation ne seront pas effectués.
 
Un autre inconvient, le lièvre a été levé récement, c'est que pour avoir de la perf, ben il faut utiliser un style d'écriture proche ... du C (très impératif).

n°1202516
frodon131
Mon précieux
Posté le 19-09-2005 à 15:42:40  profilanswer
 

et on apprend a faire que du recursif

n°1202519
nraynaud
lol
Posté le 19-09-2005 à 15:44:20  profilanswer
 

alors que ça ne se justifie que dans 1/10ème des cas, puisque les vrais utilisent fold_left pour les pbs terminaux et les fold_right pour les problèmes non-terminaux, et ceux qui veulent de la perf et qui peuvent utilisent for.


---------------
trainoo.com, c'est fini
n°1248698
Romzi
Chalutatation
Posté le 18-11-2005 à 19:38:21  profilanswer
 

je met un drapal vu que j'ai ce cours en licence info ;)

n°1314991
yamajako
Tu ne marcheras donc JAMAIS !?
Posté le 28-02-2006 à 01:02:42  profilanswer
 

Moi je suis en sup et j'aime bien ce langage aussi  :love:  bien qu'un e capricieux

n°1433261
darkangel
C2FFA
Posté le 29-08-2006 à 17:48:07  profilanswer
 

quelqu'un aurait une sorte de tuto pour s'initier au typage? j'entends par la comprendre le typage de caml, comment il type les expréssions qu'on lui envoit :??:

n°1446061
pwang
Posté le 22-09-2006 à 01:03:36  profilanswer
 

Moi j'utilise Objective Caml :D
 
Ben ouais, c'est quand même ce qui se fait de mieux dans le monde du langage de programmation !
 
Cependant, pour s'en rendre compte, forcément, c'est pas trop évident...
 
:/
 
---
 

darkangel a écrit :

quelqu'un aurait une sorte de tuto pour s'initier au typage? j'entends par la comprendre le typage de caml, comment il type les expréssions qu'on lui envoit :??:


 
En gros : il prend un max d'informations à partir de l'analyse de ton programme. À partir de ces informations, il fait ce qu'on appelle de l'inférence de types...
 
 
Par exemple, il sait que tous les entiers s'écrivent comme ça :  
[0-9]+ | 0[xX][a-zA-Z0-9]+ | 0[o][0-7]+ | 0[bB][01]+  
 
Et quand il voit une expression comme ça par exemple :
let f a = 1 + a ;;
Il voit que f est une fonction à 1 argument, donc de type " 'a -> 'b " au départ
Il voit que (+) est de type "int -> int -> int"
Il voit que 1 est de type "int"
Il voit que a est de type " 'a " d'après ce que j'ai dit 3 lignes plus haut
Il voit que a doit être de type int d'après le type de (+)
Il regarde si 'a et int sont compatible : oui ils sont compatibles
Donc le type de la fonction f devient int -> 'b
Il voit que (+) a ses 2 arguments qui sont du bon type. Il voit que quand il a ses 2 arguments, il retourne une valeur de type int.
Donc 1 + a est de type int, qui est le type du résultat.
Il regarde si 'b et int sont compatible : oui ils sont compatibles.
Donc le résultat de f appliqué à un argument de type int est de type int.
Donc f est de type int -> int
 
 
Bon voilà en gros comment il fait : c'est super con... Mais heureusement que c'est la machine qui le fait parce que ce genre de calculs est mal géré par le cerveau humain...  :sarcastic:  
 
 
 
Un exemple plus compliqué pour la route :
 
let rec iter f l = match l with
 | [] -> ()
 | hd::tl -> f hd ; iter f tl  
;;
 
 
iter est de type 'a
iter est une fonction et attend 2 arguments, donc il est de type ('b -> 'c -> 'd) qui vaut donc 'a (ils sont compatibles)
f est de type 'b
l est de type 'c
le corps de iter est de type 'c
on filtre l avec une liste vide : l est une liste : l est de type 'e list qui vaut donc 'c
cette branche du filtrage rend () qui est de type unit.
donc 'd vaut unit.
on filtre l avec une tete de liste et une queue de liste : l est une liste de type 'f list qui vaut donc 'e list qui lui-même vaut 'c
cette branche du filtrage rend une séquence :
 - on regarde le 1er élément de la séquence qui est f hd.
   f est donc une fonction qui attend un argument.
   f est donc de type 'g -> 'h qui vaut 'b
 - on regarde le 2nd élément de la séquence qui est iter f tl.
   iter attend 2 arguments et est donc de type 'i -> 'j -> 'k qui vaut donc 'b -> 'c -> 'd.
   f est donc de type 'j = 'c = 'g -> 'h
   tl est donc de type 'c = 'j = 'e list = 'f list  
 
(iter f tl) est de type unit tout comme l'autre branche, donc 'd = unit
 
bref... je vais pas faire le détail des unifications de types...
 
On arrive à la fin, on dit que iter est de type  
  ('a -> 'b) -> 'a list -> unit
 
List.iter est de type ('a -> unit) -> 'a list -> unit parce que on force son argument a avoir ce type là.
 
---
Pour savoir si 2 types sont unifiables, on regarde si l'un est un inclus dans l'autre.
 
'a contient 'b -> 'c
mais ne contient pas 'a -> 'a
'a contient tous les types de base (int, float, string, 'b array, 'b list,...) mais ne contient pas 'a list.
 
et caetera...  :D


Message édité par pwang le 22-09-2006 à 01:18:31

---------------
étudiant en master de recherche en informatique - algorithmique et programmation - langages : ocaml, etc.
n°1446062
pwang
Posté le 22-09-2006 à 01:07:43  profilanswer
 

nraynaud a écrit :

alors que ça ne se justifie que dans 1/10ème des cas, puisque les vrais utilisent fold_left pour les pbs terminaux et les fold_right pour les problèmes non-terminaux, et ceux qui veulent de la perf et qui peuvent utilisent for.


fold_right peut s'avérer plus rapide qu'une boucle for dans la mesure ou empiler peut être plus performant que boucler...
 
de toutes façons, les appels terminaux quand ils sont bien détectés et optimisés sont transformés en "for"...  :ange:


Message édité par pwang le 22-09-2006 à 01:18:39

---------------
étudiant en master de recherche en informatique - algorithmique et programmation - langages : ocaml, etc.
n°1446063
pwang
Posté le 22-09-2006 à 01:09:31  profilanswer
 

Flaie a écrit :


Code :
  1. ;;; je sais plus si cette partie est obligatoire
  2. ;;; je la met quand même au cas où
  3. (if (and (boundp 'window-system) window-system)
  4.     (when (string-match "XEmacs" emacs-version)
  5.       (if (not (and (boundp 'mule-x-win-initted) mule-x-win-initted))
  6.           (require 'sym-lock))
  7.       (require 'font-lock)))




 
effectivement cette partie n'a pas de rapport avec le mode tuareg ;)
 
-----
 

yamajako a écrit :

Moi je suis en sup et j'aime bien ce langage aussi  :love:  bien qu'un e capricieux


c'est-à-dire qu'il t'évite d'écrire des conneries sans te prévenir  :p  
 
tu n'auras jamais une erreur de type à l'exécution... ça protège de beaucoup d'erreurs ;)
 
en C, si tu fais une erreur de type non détectée (la plupart ne sont pas détectées puisque la plupart du temps on utilise des casts...), ben tu te ramasses soit un segmentation fault, soit un comportement totalement incontrôlé...  :sarcastic:


Message édité par pwang le 22-09-2006 à 01:18:35

---------------
étudiant en master de recherche en informatique - algorithmique et programmation - langages : ocaml, etc.
n°1446184
darkangel
C2FFA
Posté le 22-09-2006 à 11:43:12  profilanswer
 

ok merçi :)

n°1506984
ol18
Posté le 25-01-2007 à 00:08:41  profilanswer
 

Bonjour!
 
En cour d'info on commence le caml! Mais vu que les prof sont pas au top :d je voudrai savoir où je pourrais trouver des tutos (en fraçais si c'est possible).
 
En même temps si vous avez des références de livre à acheter que vous trouvez bien pouvez vous me les indiquer?
 
Merci!


Message édité par ol18 le 25-01-2007 à 00:10:35
n°1506986
souk
Tourist
Posté le 25-01-2007 à 00:40:04  profilanswer
 

peut etre sur le site de l'inria ? [:dawa]
 
sinon aussi peut etre http://www.univ-valenciennes.fr/RO [...] /DA-OCAML/

n°1508729
ol18
Posté le 30-01-2007 à 16:58:48  profilanswer
 

Je voudrai  savoir comment on fait pour changer du int en string par exemple.  
Merci!

n°1508734
souk
Tourist
Posté le 30-01-2007 à 17:03:39  profilanswer
 

string_of_int ?
 

Code :
  1. - : int -> string = <fun>


Message édité par souk le 30-01-2007 à 17:04:18
n°1508737
ol18
Posté le 30-01-2007 à 17:05:57  profilanswer
 

Sa marche pas !!

n°1508739
ol18
Posté le 30-01-2007 à 17:07:06  profilanswer
 

J'ai rien dit c'est moi qui :d pas écrire :D

Message cité 1 fois
Message édité par ol18 le 30-01-2007 à 17:09:16
n°1508743
souk
Tourist
Posté le 30-01-2007 à 17:07:53  profilanswer
 

ol18 a écrit :

J'ai rien dit c'est moi qui c'est pas écrire :D


'ffectivement [:joce]

n°1640959
boblenain2​00
Posté le 11-11-2007 à 15:12:46  profilanswer
 

Est-ce que quelqu'un peut m'expliquer quel est l'utilité du filtrage par cas en caml. Je comprend meme pas la définition :d

n°1640969
nraynaud
lol
Posté le 11-11-2007 à 15:25:01  profilanswer
 

c'est un peu comme le switch-case du C, les même applications. ou quand tu aurais mis plein de if ... else if .... else if ... en C.
 
c'est très basique.
Comme on utilise beaucoup o'caml pour réécrire des graphes, on s'en sert souvent pour des structure du type "si j'ai un noeud de type machin, alors que créé un noeud de type bidule".


---------------
trainoo.com, c'est fini
n°1641063
pwang
Posté le 11-11-2007 à 17:32:59  profilanswer
 

boblenain200 a écrit :

Est-ce que quelqu'un peut m'expliquer quel est l'utilité du filtrage par cas en caml. Je comprend meme pas la définition :d


 
 
Le filtrage d'OCaml permet entre autres de déstructurer des données très facilement.
 
Deux exemples :
1. les arbres :
 


(* un arbre, ici, c'est soit un noeud avec 2 fils, soit une feuille *)
type 'a tree =
| Node of 'a * 'a tree * 'a tree  
| Leaf
 
let is_empty = function Leaf -> true | _ -> false
 
let is_not_empty = function Node _ -> true | false
 
let has_exactly_one_node = function
  | Node (_, Leaf, Leaf) -> true
  | _ -> false
 
let root_is_true = function
  | Node (true,  _,  _) -> true
  | _ -> false


 
2. sur les listes :
 


let is_empty = function [] -> true | _ -> false
 
let has_exactly_one_element = function [ _ ] -> true | _ -> false
let has_exactly_two_elements = function [ _ ; _ ] -> true | _ -> false
 
let has_exactly_one_element = function _ :: [] -> true | _ -> false
let has_exactly_two_elements = function _ :: _ :: [] -> true | _ -> false
 
let begins_with_1_2 = function 1 :: 2 :: _ -> true | _ -> false


 
etc...
 
Sur des structures de données arborescentes, OCaml est un langage dans lequel  il est très facile et très rapide de coder de quoi travailler dessus.
Si on prend un langage comme Java, il faut définir des hiérarchies de classes super complexes pour faire au final des choses pas si complexes.
Si on prend un langage comme C, on est poussé à utiliser du transtypage (cast) absolument pas sûr.
Si on prend un langage comme C++, on patiente longtemps à la compilation (ou bien on va dormir)...


Message édité par pwang le 11-11-2007 à 17:36:25
n°1651890
boblenain2​00
Posté le 02-12-2007 à 20:43:17  profilanswer
 

Merci pour ces réponses :jap:
 
Autre question, comment on fait pour créer plusieurs fonctions avec une seule instructions. (un seul ;; je veux dire)
 

Code :
  1. let def_M = function (_,_,1) -> 11
  2.      |2 -> 12
  3.      |y -> y -2
  4. in let def_A = function (x,y,z) -> if def_M(y) >= 11 then z-1 else z
  5. and let def_S = function (x,y,z) -> z/100
  6.  and let def_P = function (x,y,z) -> z mod 100
  7. in let numero_jour = function (x,y,z) -> (x + ((48*def_M(y))/def_S(z)) + def_P(z) + def_P(z) + (def_S(z)/4) - 2*def_S(z)) mod 7;;


 
Le AND fonctionne pas visiblement, comment faire ?

n°1651969
pwang
Posté le 03-12-2007 à 08:17:20  profilanswer
 

let rec f1 = ...
and f2 = ...  
and f3 = ...
 
sans mettre de "in" comme tu le fais. Le "rec" permet de dire que les fonctions se connaissent.

n°1652328
boblenain2​00
Posté le 03-12-2007 à 17:01:11  profilanswer
 

Le "rec" c'est pas pour les fonctions récursives seulement ?

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2  3

Aller à :
Ajouter une réponse
 

Sujets relatifs
[CAML] Ordre lexicographique et tableauxunique sur 2 champs en Access
[Caml] Aide pour une fonctioncaml
Redirection unique[Caml] Conception de ptit jeux --> probleme!
[Caml] pb avec des matrix en camlCaml :: forcer le programme à attendre l'appui sur une touche
Caml :: inclure un commentaire 
Plus de sujets relatifs à : [Topic Unique] Caml


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)