Rediriger le read ... [Divers][Scheme] - Divers - Programmation
Marsh Posté le 11-01-2005 à 21:11:09
J'ai vraiment l'impression d'être le seul paumé à faire du Scheme ici
Marsh Posté le 11-01-2005 à 23:38:41
Bonjour,
Non tu n'est pas le seul, enfin presque, vu que mon niveau programmation se situe au niveau tanche ++ j'essaye d'apprendre scheme "pour le plaisir"(sic). Je ne sais pas si je pourrai t'aider, mais j'avoue ne pas trop comprendre ce que tu veux faire. Peut-tu expliquer de manière plus "imagée" pour moi. En ce qui concerne close, elle sert tout simplement à fermer le port que tu as crée auparavant par la procédure make-custom-input-port. Cela paraît bête comme réponse, je pense que tu le savais déjà. Mais explicite et je vérai si je peux t'aider.
Marsh Posté le 11-01-2005 à 23:45:43
Par analogie avec d'autres langages, je dirais que peek se contente de lire le flux en entrée sans le "consommer", contrairement au read qui lit l'entrée en la consommant, c'est à dire la supprime du flux après lecture.
La fonction close à pour but de fermer le flux (comme on doit fermer un fichier)
Après en googlant ca doit le faire mais bon... Scheme n'est pas super utilisé
Marsh Posté le 11-01-2005 à 23:58:02
je viens de dénicher le lien suivant :
http://scheme.auteuil.inserm.fr/Li [...] @default11
A priori, mes intuitions n'étaient pas trop mauvaises.
Marsh Posté le 12-01-2005 à 00:33:41
Merci pour le lien, je l'avais pas celui-là. Au fait quelle implémentation Scheme utilises-tu. Moi, j'ai Dr-Scheme (http://www.drscheme.org/). Ce que j'ai compris, c'est que tu passes par une interface graphique et que tu veux pouvoir lire/traiter les données écrites dans un champ dédié (tu as écrit "classe text%" ). Pourquoi n'essayes-tu pas un
Code :
|
?
Ou si tu es dans un éditeur tu as une méthode "identique" qui est get-text% dans text% qui implémente editor%. Note : il existe des méthodes qui ferment automatiquement les ports outilisés. Mais dis-nous en plus.
Marsh Posté le 12-01-2005 à 01:57:14
Ah, là ca fait vraiment plaisir! Moi qui était parti vers de lointaines contrées http://www.codecomments.com/
Moi aussi je suis sur DrScheme de chez PLT.
Bon en ce qui concerne la fonction close y a pas de problemes je me suis fait du souci pour rien
Par contre (send text-field get-value (from text-field%)) marche uniquement sur des objets de la classe text-field% pas de la classe text%. Text-field% est beacoup plus restreint que la classe text%.
Le probleme avec la methode get-text de la classe text% est que il faut specifier le start et le end cad l'indice de depart et de fin du text qu'on veut prendre ... ce qui n'est pas pratique dans le cas ou on veut en faire une fonction (une lambda a mettre en argument dans le make-custom-port).
J'ai laissé tomber mes tentatives avec cette fonction, mais j'y retournerai dés demain.
Une autre solution serait d'ecouter cette entrée standard avec la methode on-char et dés qu'on a entendu une touche "entrée" on renvoi la chaine, qui serai ensuite analysée bein entendu (symbol?, number? ... tout ceci pour la gestion des exceptions) avec la methode get-text. Dans ce cas plus besion de read, car c'est moi qui le fait. Ici le probleme c'est que il faut taper dans des threads je pense.
En fait je me suis un ptit peu precipité avec ma volonté de rediriger le vrai read de scheme, car j'ai trouvé sur d'autres forums que dans mon cas ce serai plus rediriger read-line, ce qui est beacoup plus simple.
En fait j'ai trouvé un truc tout bete :
(get-text-from-user "INPUT DIALOG" "Entrez une valeur" global_frame)
C'est trés light, ca me plait pas du tout mais pour l'instant ca marche Mais je ne fait que devier le probleme, car mon but étant de simuler une fenetre d'interaction "à la DrScheme". En fait, je suis en train de faire un interpreteur d'un mini-Basic en Scheme j'ai fini toute la partie lex/parse, me manqué plus que l'interpretation de l'instruction [ INPUT "Message", var ] qui demande la valeur à l'utilisateur et la met dans x.
Mais le boss final sera plus coriace que ca, il s'agit du coloriage de la syntaxe et là je doute que je puisse trouver des choses du style (please-color-basic-syntax text '(A-liste de mots clés . couleurs)) à la maniere du get-text-from-user
Marsh Posté le 12-01-2005 à 10:12:42
Bonjour,
ALors là, euh, ben,... Moi qui pensais pouvoir enfin être utile à quelqu'un . Cela semble dépasser mes capacités. Par contre si tu n'es pas extrêmement pressé, laisse moi du temps pour potasser, tout cela m'intéresse et je crois avoir lu il y a longtemps des trucs à ce sujet (le temps d'aller à la cave et d'en ressortir vivant). Et après, peut-être poserai-je quelques questions autres. A bientôt et courage.
Marsh Posté le 12-01-2005 à 21:35:31
Re bonjour, voire bonsoir,
Je me suis permis de chercher un peu sur ton problème. Si tu restes dans l'optique de prendre des info dans un text%, voilà qq trucs qui m'ont l'air intéressants. Cependant vu mon niveau, je t'orienterai plutôt vers les docs: pour prendre des info dans text% je pense que tu dois passer par la classe snip% (essaye sur ta console, après avoir lancé ton appli (send text% find-snip 0 'after). Lis la doc sur string-snip%. Autre chose, va voir pour editor-stream-in% dans la doc.
Mais, d'après ce que tu me dis, tu veux faire une interface à la drscheme, donc dans la "fenêtre" du bas, tu veux pouvoir écrire autre chose que ta variable x, une procédure par exemple. Ne voudrais-tu pas, finalement, instancier un prompt? tape dans la doc les mots-clefs suivants: insert-prompt ; read-eval-print-loop ainsi que graphical-read-eval-print-loop. Pour moi, c'est trop compliqué.
Au fait, n'hésite pas à me dire si mes commentaires sont du type boulet! Pour finir, as-tu résolu ton pb de frames ajustables?
Nouvelle info : http://www.open-scheme.com/doc/tutorial/node127.htm ça peut te donner des idées.
Marsh Posté le 11-01-2005 à 19:51:27
Bonjour, voila j'aimerais "rediriger" le vrai read de scheme vers un objet de la classe text%, ceci non pas par peur devant le boulot que ca represente (quoique) mais surtout au petit cadre tout joli dans lequel read écoute l'entrée standard.
Sachant que la fonction read peut s'écrire (read port), ceci m'amméne donc au probleme de la redéfinition/construction d'un port.
Je veux donc que ce soit précisement mon éditor
Or il existe une jolie fonction :
(make-custom-input-port read-string-proc peek-string-proc-or-false close-proc)
Malheureseument les choses deviennent moins jolies à partir de là
Il s'agit maintenant de définir les fonction qui lisent, peekent et ferme le port.
Je suppose que read-string-proc est un truc du genre:
Le probleme c'est que je m'imagine mal ce que peuvent faire les autres fonctions ; peek et close.
Quelqu'un a une idée ?
Message édité par Chronoklazm le 11-01-2005 à 20:09:18
---------------
Scheme is a programmable programming language ! I heard it through the grapevine !