[Divers][Scheme] Rediriger le read ...

Rediriger le read ... [Divers][Scheme] - Divers - Programmation

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:  
 

Code :
  1. (lambda (p-in)
  2.      (if (equal? p-in 'eof)
  3.          ....
  4.          (send text get-text (send text get-lastline) 'eof)))
  5. // Ceci on écoutant les touches avec on-char


 
Le probleme c'est que je m'imagine mal ce que peuvent faire les autres fonctions ; peek et close. :sweat:  
 
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 !
Reply

Marsh Posté le 11-01-2005 à 19:51:27   

Reply

Marsh Posté le 11-01-2005 à 21:11:09    

J'ai vraiment l'impression d'être le seul paumé à faire du Scheme ici :(


---------------
Scheme is a programmable programming language ! I heard it through the grapevine !
Reply

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.

Reply

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é :/

Reply

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.

Reply

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 :
  1. (send a get-value (from text-field%))

?
 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.

Reply

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)) :D à la maniere du get-text-from-user :)


Message édité par Chronoklazm le 12-01-2005 à 02:03:31

---------------
Scheme is a programmable programming language ! I heard it through the grapevine !
Reply

Marsh Posté le 12-01-2005 à 10:12:42    

Bonjour,
   ALors là, euh, ben,... Moi qui pensais pouvoir enfin être utile à quelqu'un :sweat: . 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.

Reply

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.


Message édité par le_courtois le 14-01-2005 à 00:10:08
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed