Bonjour, dans le cadre d'un projet scolaire je dois réaliser des figures graphiques en Ocaml à l'aide de L-systems donnés.
On nous imposes d'utiliser les types suivants :
Symboles :Le type symbol représente un symbole — vous pouvez utiliser un type algébrique, une chaîne, ou un caractère.
Chaînes parenthésées
Le type bracketed représente l’arbre de syntaxe d’une chaîne parenthésée :
Le constructeur
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 type bracketed = S of symbol | Seq of bracketed list | Branch of bracketed list;;
Seq
représente une séquence ordinaire, tandis que le constructeur
Branch
représente une séquence entre crochets. Par exemple, si
f et p
sont des variables de type symbol la chaîne F[P[PF]F] peut être représentée par
La difficulté que je rencontre et que je n'arrive pas à parcourir ce type Bracketed pour avoir un élement voulu par exemple je fais
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Seq [(S f); Branch [(S p); Branch [(S p); (S f)]; (S f)]]
Mais comme défini dans le type Brackted Seq est une liste de Brackted donc une 'a list , non?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 let x = Seq[(S f);(S m);(S p)];; List.hd x;; (* renvoie une erreur disant This expression has Type Bracketed but an expression was expected of type 'a list *)
Donc pourquoi ne peut-on pas la traiter comme une liste?
Et sinon comment parcourir un a un les éléments d'un type bracketed ?
PS: ce que j'essaye de faire c'est de parcourir un Bracketed qui represente une génération de L-system afin de pouvoir générer la prochaine génération.
Partager