LINUX.ORG.RU

Вопросы по lisp


0

0

Нужно сделать ввод символа с клавиатуры без enter'a и эхо, типа getch().
Предполагаю (read-char-no-hang *standard-input*) в цикле пока не вернет не NIL.
Но может есть способ покрасивше...???

Я не против этого вопроса тут, но имеет смысл задавать такие вопросы в comp.lang.lisp - вероятность того что ответят и скорость ответа выше по очевидным причинам.

Ответа на вопрос не знаю :)

Kpoxman ★★
()
Ответ на: комментарий от bugmaker

> или другую либу для работы с терминалом какую сыщещ. То, что ты предлагаеш, совсем никуды негоже.

Нужно принимать с клавы управляющие символы (a,d,r например) и в зависимости от их значения, выполнять действия, т.е. что-то типа меню. Может подскажеш, как это сделать "штатными" средствами lisp ? как это обычно делается в lisp ? Ну или какие обычно сторонние либы используется ? ncurses как-то не хотелось бы...

eraser
() автор топика
Ответ на: комментарий от eraser

точно такие же как и в сях, например. Подключаецо библиотека, которая это умеет. Например, ncurses, getch() из которой ты упомянул. Интересно, почему в сях использовать ncurses незападло, а в лиспе для того же дела нехочецо?

bugmaker ★★★★☆
()
Ответ на: комментарий от eraser

Если так, чтобы попроще, то, например:

(labels ((read-cmd ()
    (let ((a (read-char *standard-input*)))
      (when (char= a #\a) (print 'do-a) (read-cmd))
      (when (char= a #\d) (print 'do-b) (read-cmd)))))
  (read-cmd))

mind
()
Ответ на: комментарий от bugmaker

> почему в сях использовать ncurses незападло, а в лиспе для того же дела нехочецо?

Да дело не в западло. Просто спрашивал можно ли без сторонних средств обойтись. Ну если нет, то буду либы использовать...

eraser
() автор топика
Ответ на: комментарий от eraser

без сторонних средст такое только в недоделках типо паскаля возможно. Иначе будет напрасная зависимость от платформы и перегруженность наречия.

bugmaker ★★★★☆
()
Ответ на: комментарий от eraser

> read-char он enter'a ждет, а мнеб чтоб после нажима сразу...

Прошу прощения. Тогда, действительно, только три альтернативы:

1. read-char-no-hang;
2. библиотеки (cl-ncurses::getch);
3. смотреть, что есть для данной реализации CL. Например, в clisp можно так:
(EXT:WITH-KEYBOARD
 (LOOP :for char = (READ-CHAR EXT:*KEYBOARD-INPUT*)
   :for key = (OR (EXT:CHAR-KEY char) (CHARACTER char))
   :do (PRINT (LIST char key))
   :when (EQL key #\Space) :return (LIST char key)))

mind
()
Ответ на: комментарий от bugmaker

А как это сделать в великом и могучем Lisp'е, чтобы было просто и платформо-независимо? Или под каждую платформу свои сторонние средства искать?

anonymous
()
Ответ на: комментарий от anonymous

ты write-only бот чтоли? Читать не умееш? Точно так же как и других наречиях, подключяюцо библиотеки. Кроме паскаля есть ещё гдето встроенный аналог ево readkey?

bugmaker ★★★★☆
()
Ответ на: комментарий от bugmaker

Использую CMUCL.  Хочю заюзать CLX.
Как мне её подрубить? 
Делаю 
(in-package :xlib)

При попытке запуска примера всеравно пишит ошибки:

Undefined function CREATE-GCONTEXT 
................ и т.д.

И так по всем ф-циям...

Как правильно подключить ???

eraser
() автор топика
Ответ на: комментарий от eraser

Тож самое и с QT.

(require :qt "qt")
(defpackage simple
  (:use common-lisp qt))
(in-package simple)

Проходят нормально.

При компиляции
(defun hello-world ()
  (with-qt ()
    (object lb '(label :text "<h1>Hello World!"))))

* ; Converted HELLO-WORLD.
; Compiling LAMBDA NIL: 
; Compiling Top-Level Form: 
; In: DEFUN HELLO-WORLD
;   (OBJECT LB '(LABEL :TEXT "<h1>Hello World!"))
; Warning: Undefined variable LB
; ; Warning: Undefined function OBJECT 
А при запуске:

Error in KERNEL::UNBOUND-SYMBOL-ERROR-HANDLER:  the variable LB is unbound.
   [Condition of type UNBOUND-VARIABLE]

Не подключается... Что не так ???

eraser
() автор топика
Ответ на: комментарий от eraser

> (in-package :xlib)

(require :clx) сперва. Луче ИМХО (xlib:create-gcontext ...) а in-package убрать йухан. Можно также (use-package :xlib) и (create-gcontext ...), но есть риск на конфликт имён нарвацо.

bugmaker ★★★★☆
()
Ответ на: комментарий от eraser

С Qt незнаю, неработал. Скорее всево тоже самое. Пробуй qt:object вместо, или как там по дукументации положено. Чё за биндинг к qt пытаесся?

bugmaker ★★★★☆
()
Ответ на: комментарий от eraser

Вот заюзать примерчик хачу hello-world.lisp из экpамплов cmucl-clx:

В этом файле ф-ция 

(defun hello-world (host &rest args &key (string "Hello World") (font "fixed"))

Что ей передать в качестве параметров ? host ?

(hello-world "root")

Error in function EXTENSIONS:CONNECT-TO-INET-SOCKET:
   Error connecting socket to [root:6000]: Connection refused

IP'ишники тож в качестве host (127.0.0.1, например) передовал....

eraser
() автор топика
Ответ на: комментарий от eraser

У этих библиотек разное назначение - LTK позволяет делать интерфейсы на Tk, clx - просто рисовать (хочешь виджеты - рисуй сам).

Begemoth ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.