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 :

Error : Syntax error


Sujet :

Caml

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2015
    Messages : 4
    Points : 2
    Points
    2
    Par défaut Error : Syntax error
    Bonjour,

    je dois coder un programme en ocaml dans le cadre d'un projet scolaire, celui-ci doit appliquer cette méthode https://fr.wikipedia.org/wiki/M%C3%A...de_Nelder-Mead sur une certain fonction donnée (dans mon exemple j'ai pris le même que sur wiki : https://fr.wikipedia.org/wiki/Fonction_de_Rosenbrock ).

    Comme ce langage de programmation ne m'es pas familier du tout, j'ai fais une première version en java qui fonctionne correctement et j'ai tenté de la transcrire malgré mes connaissances limitées en ocaml.

    Toutes les fonctions compiles sauf la toute dernière où il m'affiche :

    Characters 380-382:
    ;;
    ^^
    ||
    Error : syntax error
    Ce message ne m'avance pas plus que ça quand à l'erreur que j'aurais pu faire. C'est pourquoi j'aurais besoin de vos aide si vous en avez le temps bien sur.
    Le code .ml est dans le zip ci-dessous.

    Merci d'avance

  2. #2
    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 990
    Points
    2 990
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    (* Creation d'un tableau 2D *)	
    let matrix (n) (m) init =
      let result = Array.make n (Array.make m init) in
        for i = 1 to n - 1 do
          result.(i) <- Array.make m init
        done;
        result;;
    Ce n'est pas du tout ce que tu veux, pour créer une matrice il faut utiliser Array.make_matrix.

    Error : syntax error
    Avec son analyseur ascendant, OCaml n'est pas très bon (on pourrait même dire qu'il est très mauvais) pour localiser et documenter les erreurs de syntaxe. Une bonne façon de l'embrouiller c'est de déclarer avec let sans jamais spécifier de portée avec in.
    Et c'est exactement l'erreur que tu as faite :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    	let tabres = etape2_1(); (* où est la portée ? *)
    	etape2_2 tabres;
    	let sumx = etape3_1(); (* où est la portée ? *)
    	let sumy = etape3_2(); (* où est la portée ? *)
    	let xr = etape4_1 sumx; (* où est la portée ? *)
    	let yr = etape4_2 sumy; (* où est la portée ? *)
    Du même auteur: mon projet, le dernier article publié, le blog dvp et le jeu vidéo.
    Avant de poser une question je lis les règles du forum.

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2015
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Bonjour,

    Tout d'abord merci pour votre réponse.

    Concernant le premier point : j'avais récupéré cette méthode sur je ne sais plus quel site mais les résultats dans la console m'avait l'air comparable à ce que ça me retourne en java.
    Du coup en googlant ce que vous me proposez je ne vois pas la différence avec ce que j'ai en exécutant la première méthode

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    #let mat1= Array.make_matrix 3 2 0;;
    val mat1 : int array array = [|[|0; 0|]; [|0; 0|]; [|0; 0|]|]
    # mat1.(0).(0)<-1;;
    - : unit = ()
    # let mat2 = matrix 3 2 0;;
    val mat2 : int array array = [|[|0; 0|]; [|0; 0|]; [|0; 0|]|]
    # mat2.(0).(0)<-1;;
    - : unit = ()
    # mat1;;
    - : int array array = [|[|1; 0|]; [|0; 0|]; [|0; 0|]|]
    # mat2;;
    - : int array array = [|[|1; 0|]; [|0; 0|]; [|0; 0|]|]
    #
    Concernant le deuxième point j'ai du m'embrouiller sur la fin pour savoir si je devais mettre un ; ou un in mais visiblement le in l'a décoincé en effet. Du coup j'ai un autre message d'erreur qui m'indique que ma fonction etape2_2 est erronée.

    Je vais essayer de remplacer toutes utilisations d'ancienne méthode de création de matrice pour commencer.

  4. #4
    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 990
    Points
    2 990
    Par défaut Pour appeler une fonction il faut lui appliquer un argument
    Peut-être enchaineetapes () ?
    Du même auteur: mon projet, le dernier article publié, le blog dvp et le jeu vidéo.
    Avant de poser une question je lis les règles du forum.

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2015
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par SpiceGuid Voir le message
    Peut-être enchaineetapes () ?
    Oui c'est cette fonction qui doit être erronée puisque c'est elle qui introduit la récursivité. Je vais un peu creuser le truc.

  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 990
    Points
    2 990
    Par défaut Ta nouvelle version n'est pas récursive
    Tu peux le vérifier en effaçant rec, ça compilerait encore.

    En fait ta façon de penser est tellement Java-esque que j'en viens à me demander si un objet ne ferait pas plus vite ton affaire :

    Code OCaml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    object
       method etape1 () = ...
       val tabsimplex = etape1 ()
       method etape2 () = ...
       val tabres = etape2 ()
       method etape2_2 () = ...
       method etape3_1 () = ...
       method etape3_2 () = ...
       method etape4_1 x = ...
       method etape4_2 y = ...
    initializer
       ...
    end
    Du même auteur: mon projet, le dernier article publié, le blog dvp et le jeu vidéo.
    Avant de poser une question je lis les règles du forum.

  7. #7
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2015
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par SpiceGuid Voir le message
    Tu peux le vérifier en effaçant rec, ça compilerait encore.

    En fait ta façon de penser est tellement Java-esque que j'en viens à me demander si un objet ne ferait pas plus vite ton affaire :

    Code OCaml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    object
       method etape1 () = ...
       val tabsimplex = etape1 ()
       method etape2 () = ...
       val tabres = etape2 ()
       method etape2_2 () = ...
       method etape3_1 () = ...
       method etape3_2 () = ...
       method etape4_1 x = ...
       method etape4_2 y = ...
    initializer
       ...
    end
    Effectivement en jartant le rec ça compile mais ça ne donne pas le résultat attendu (que des 0 dans le tableau de simplexes au lieu de 1). Oui j'essai de traduire le java qui marche bien en ocaml de manière brute de décoffrage mais ça n'est pas la meilleur solution. Je vais me renseigner sur les objets et tenter le coup! Merci

    C'est terminé je joins les fichiers si ça peut aider quelqu'un un jour! Merci à SpiceGuid pour ta patience et pour m'avoir accorder du temps
    Fichiers attachés Fichiers attachés

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 26/06/2007, 23h49
  2. Réponses: 4
    Dernier message: 16/10/2006, 15h16
  3. [PHP-JS] Parse error: syntax error, unexpected T_STRIN
    Par maldini dans le forum Langage
    Réponses: 4
    Dernier message: 25/07/2006, 18h49
  4. Parse error: syntax error, unexpected '}' help
    Par beur dans le forum Langage
    Réponses: 5
    Dernier message: 23/03/2006, 21h33
  5. [Configuration] Problème après l'installation (Parse error: syntax error,..)
    Par beur dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 8
    Dernier message: 21/03/2006, 14h08

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