IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Caml Discussion :

Où est l'erreur ?


Sujet :

Caml

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 25
    Points : 20
    Points
    20
    Par défaut [ Fonction permut et équation du second degré]
    Bonsoir,

    J'ai tapé sur caml deux programmes mais il y a une erreur que je ne comprend pas dans chaque cas:

    *Résolution d'une équation du 2de degré:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    let degre_2(a,b,c)=
    if a= 0.
    then failwith "equation incorrecte"
    else let delta = b**.2.-.4.*.a*.c in
    	if delta >= 0.
    	then ((-.b+.sqrt(delta)/.(2.*.a), (-.b+.sqrt(delta)/.(2.*.a))
    	else failwith "discriminant négatif";;

    Entrée interactive:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >	else failwith "discriminant négatif";;
    >	^^^^
    Erreur de syntaxe.
    je ne vois pas le soucis avec ce else !

    *Permutation de 2 éléments avec "if":


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    let permut x y= let sauv=!ref x in
    	if y<x then x:= !y 
    		    y:= !sauv
    	else	x:=!x
    	        y:=!y;;
    Entrée interactive:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >		    y:= !sauv
    >		    ^
    Cette expression est de type ('a -> 'b) ref,
    mais est utilisée avec le type 'a.
    là encore je ne vois pas ce que 'a signifie...

    Merci de votre aide.

  2. #2
    Rédacteur/Modérateur

    Avatar de gorgonite
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Décembre 2005
    Messages
    10 322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2005
    Messages : 10 322
    Points : 18 681
    Points
    18 681
    Par défaut
    'a est un type générique non spécifié, qui pourra être spécialisé plein de choses selon le contexte

    exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    let select f lst =
      match lst with
        [] -> []
       |a::q -> if f a then a::(select q) else select q
    ;;
    le type sera select : ('a -> bool) -> 'a list -> 'a list

    après que la liste contienne des entiers ou des structures plus compliquées, peu importe tant que l'on a le même 'a pour f et lst

  3. #3
    Membre émérite
    Avatar de SpiceGuid
    Homme Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 704
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 704
    Points : 2 991
    Points
    2 991
    Par défaut
    Bonsoir et bienvenue sur dvp.com,

    , c'est plus clair pour tout le monde.

    Un gros défaut de Caml c'est que les messages d'erreur sont parfois un peu trop obscurs, le plus sûr c'est encore de relire ton code avec soin pour ne plus avoir de message d'erreur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    then ((-.b+.sqrt(delta)/.(2.*.a), (-.b+.sqrt(delta)/.(2.*.a))
    else failwith "discriminant négatif";;
    as-tu bien refermé toutes les parenthèses précédemment ouvertes ?

    tu voulais sans doute écrire "let sauv = ref x in"

    tu voulais sans doute écrire "if !y < !x then x:= !y"

  4. #4
    alex_pi
    Invité(e)
    Par défaut
    Citation Envoyé par Kazuhiko$ Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >	else failwith "discriminant négatif";;
    >	^^^^
    Erreur de syntaxe.
    je ne vois pas le soucis avec ce else !
    SpiceGuid t'a donné la réponse :-)


    Citation Envoyé par Kazuhiko$ Voir le message
    *Permutation de 2 éléments avec "if":


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    let permut x y= let sauv=!ref x in
    	if y<x then x:= !y 
    		    y:= !sauv
    	else	x:=!x
    	        y:=!y;;
    Tu as oublié les ; après les instructions. Et il faut aussi regrouper entre parenthèses ce qu'il y a après le else. (et il vaut mieux faire pareil pour entre le then et le else). Et pourquoi tu mets la valeur de x dans une référence alors que ça ne change pas ? Et pourquoi faire "x := !x" qui ne change rien ?
    bref :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    let permut x y = 
      if !y < !x then 
        (let aux = !x in 
           x := !y; 
           y := aux)
    non ? (les parenthèses sont peut être pas indispensables, mais dès qu'on fait des effets, la syntaxe d'OCaml est foireuse, autant en rajouter pour être sûr)

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 25
    Points : 20
    Points
    20
    Par défaut
    Bonsoir,

    En effet, j'ai fait des erreurs bêtes avec les parenthèses et j'ai compliqué les choses pour rien avec la fonction permut... en plus, l'aide ne s'affiche pas sur CAML light car je suis sur Vista... Maintenant tous les programmes fonctionnent, merci beaucoup pour vos réponses

  6. #6
    Membre émérite
    Avatar de SpiceGuid
    Homme Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 704
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 704
    Points : 2 991
    Points
    2 991
    Par défaut
    Quand tu as eu/trouvé toutes les réponses à tes questions tu peux cliquer
    Tu peux aussi éditer le titre Où est mon erreur ça n'est pas assez spécifique, ça n'aide pas les autres à identifier les sujets où ils pourraient trouver une réponse à leurs propres difficultés.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 13
    Dernier message: 30/01/2006, 15h21
  2. Où est l'erreur?
    Par Paulinho dans le forum C++
    Réponses: 3
    Dernier message: 26/10/2005, 10h48
  3. [VB.NET] Pagination DataGrid (où est l'erreur?)
    Par franculo_caoulene dans le forum ASP.NET
    Réponses: 2
    Dernier message: 25/10/2004, 12h46
  4. Ou est l'erreur ?
    Par Antoine NSG dans le forum Langage SQL
    Réponses: 6
    Dernier message: 08/09/2004, 11h56
  5. [Erreur] Quel est cette erreur?
    Par netah25 dans le forum C++Builder
    Réponses: 3
    Dernier message: 11/08/2004, 11h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo