New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Feature wish: better pretty-printing for cyclic values #3421
Comments
Comment author: administrator
Le coût de détection des cycles n'est évidemment pas nul, même s'il D'habitude (dans les anciennes implémentations de Caml qui avaient ce t0 where t0 = ... and t1 = ... où t était le nom du type concerné. On pourrait maintenant plutôt let rec t0 = ... and t1 = ... in Qui aurait aussi l'avantage d'être un programme Caml légal... Pierre Weis INRIA, Projet Cristal, Pierre.Weis@inria.fr, http://pauillac.inria.fr/~weis/ |
Comment author: administrator On Wed, 10 Jul 2002, Pierre Weis wrote:
Oui ! Mais de toute manière, il y a une limite à la taille de la
Ah tiens, pourquoi ça a changé ? J'ai justement choisi cette notation
Comme une demande a toujours plus de poids quand on envoie du code avec, Index: toplevel/genprintval.mlRCS file: /caml/ocaml/toplevel/genprintval.ml,v
|
Comment author: @mshinwell I think the fix to 6228 resolves this. |
Original bug ID: 1231
Reporter: administrator
Assigned to: @mshinwell
Status: closed (set by @xavierleroy on 2015-12-11T18:27:44Z)
Resolution: fixed
Priority: normal
Severity: feature
Fixed in version: 4.02.0+beta1 / +rc1
Category: ~DO NOT USE (was: OCaml general)
Has duplicate: #6228
Monitored by: jm
Bug description
Hello,
l'affichage d'une valeur circulaire (créée avec un let rec ou avec
des effets de bords) dans le toplevel n'est pas très satisfaisante:
il ne termine que parce que le pretty-printer s'arrête à une certaine
profondeur.
On peut imaginer de detecter les boucles comme pour les types récursifs
et de les briser en introduisant des alias, par exemple:
type t = { x : int; mutable y : t option };;
let a = { x = 10; y = None };;
a.y <- Some a;;
a;;
donnerait:
{ x = 10; y = Some #a } as #a
ou peut-être:
#a where #a = { x = 10; y = Some #a}
(ou n'importe quelle autre syntaxe pour les «variables de valeurs»).
La deuxième possibilité permet parfois d'y voir plus clair
lorsqu'il y a des boucles imbriquées, si on autorise la forme
plus générale: v where #a1 = v1 and ... and #an = vn.
Par exemple, pour let rec x = 1 :: y and y = 2 :: x in (x,y) :
(#a, #b) where #a = 1 :: #b and #b = 2 :: #a
(pour les listes, il faudrait renoncer aux crochets, et utiliser
explicitement le constructeur (::))
Un affichage soigné des valeurs cycliques serait très appréciable lorsque
l'on fait dans le toplevel la mise au point d'algorithmes sur des graphes.
Je ne vois pas vraiment de difficultés techniques. Est-ce que vous
envisagez d'implémenter ce genre de chose ?
-- Alain
The text was updated successfully, but these errors were encountered: