From: <sca...@on...> - 2012-08-02 16:07:07
|
Hi, I'm trying to understand some code in a lisp application and trying to change it to communicate with Java. I've got this principal function: (def$method (basic-free-text-processor :ask-user) (fact &optional (negation-flag nil)) (let ((item-list `(,(if negation-flag (getentry expected-answer-no-str free-text-io-table) (getentry expected-answer-yes-str free-text-io-table)) ("" :no-select t) ,@(getentry ask-item-list free-text-io-table))) (label (getentry choose-one-of-str free-text-io-table))) ($send meta-processor :babylon-format "~%~A" ;;; <- (format-translate-true-or-false fact)) (do ((answer (normalize-answer ($send meta-processor :babylon-read (list *help-key*))) ($send meta-processor :choose-from-menu item-list label)) (echo nil t)) ((member answer '(yes no unknown help *help-key*)) (if echo<< ($send meta-processor :babylon-format "~(~S~)" (translate-answer answer))) (cond ((eq answer 'yes) ($send self :add fact 'true) 'true) ((eq answer 'no) ($send self :add fact 'false) 'false) ((eq answer 'unknown) ($send self :add fact 'false) 'unknown) ((eq answer 'help) 'help) ((eql answer *help-key*) ($send meta-processor :babylon-format "?") 'help)))))) This function it's asking the user, if some question are true or false. The user type y, n or the help ? key. The problem is that I'm trying to pass the true or false from a Java application using sockets. In this part of the code: (do ((answer (normalize-answer ($send meta-processor :babylon-read (list *help-key*))) ($send meta-processor :choose-from-menu item-list label)) Are calling the babylon-read function: (I think that it's the function that read the answer from the user) (def$method (tty-dialog-mixin :babylon-read) (&optional special-keys) "reads in a character or a lisp form from dialog-stream. only those characters occurring in the list special-keys are read." (let ((char (read-char dialog-stream))) (cond ((member char special-keys :test 'char-equal) (clear-input dialog-stream) char) (t (prog2 (unread-char char dialog-stream) (read dialog-stream) (clear-input dialog-stream)))))) I'm trying to understand the babylon-read function do. In another file, there are this sentences: (defvar *default-dialog-stream* *standard-output*) (dialog-stream *default-dialog-stream*) so dialog-stream it's *standard-output* and I think that this is why lisp can't read the answer from Java using sockets because the lisp code must wait the answer from *standard-input*. I've tried to change dialog-stream by *stardard-input* but doesn't works and I don't know how to change this code so the lisp code can read the answer from the Java application using sockets. Thanks |
From: Pascal J. B. <pj...@in...> - 2012-08-02 16:26:00
|
"sca...@on..." <sca...@on...> writes: > (do ((answer (normalize-answer > ($send meta-processor :babylon-read (list *help-key*))) > ($send meta-processor :choose-from-menu item-list label)) Why is normalize-answer called only on the first answer, and not on the following answers? > (echo nil t)) > (if echo<< Why is a variable named echo defined, but a undefined variable named echo<< used? > ((member answer '(yes no unknown help *help-key*)) Really? The answer can be the symbol *help-key* itself? > This function it's asking the user, if some question are true or > false. The user type y, n or the help ? key. The problem is that I'm > trying to pass the true or false from a Java application using > sockets. I don't see how Java true or false are relevant here. The program is asking and reading an answer from the user, and is processing it however it wants. Notably, the method :ask-user returns a lisp symbol of type (member true false unknown help). There's no Java value here. Notice also how much more readable the code is when you don't put an interline, and when you let emacs indent it correctly: (def$method (basic-free-text-processor :ask-user) (fact &optional (negation-flag nil)) (let ((item-list `(,(if negation-flag (getentry expected-answer-no-str free-text-io-table) (getentry expected-answer-yes-str free-text-io-table)) ("" :no-select t) ,@(getentry ask-item-list free-text-io-table))) (label (getentry choose-one-of-str free-text-io-table))) ($send meta-processor :babylon-format "~%~A" ;;; <- (format-translate-true-or-false fact)) (do ((answer (normalize-answer ($send meta-processor :babylon-read (list *help-key*))) ($send meta-processor :choose-from-menu item-list label)) (echo nil t)) ((member answer '(yes no unknown help *help-key*)) (if echo<< ($send meta-processor :babylon-format "~(~S~)" (translate-answer answer))) (cond ((eq answer 'yes) ($send self :add fact 'true) 'true) ((eq answer 'no) ($send self :add fact 'false) 'false) ((eq answer 'unknown) ($send self :add fact 'false) 'unknown) ((eq answer 'help) 'help) ((eql answer *help-key*) ($send meta-processor :babylon-format "?") 'help)))))) -- __Pascal Bourguignon__ http://www.informatimago.com/ A bad day in () is better than a good day in {}. |