Оконные приложения для Лисп - Lisp
Формулировка задачи:
Всем доброго времени суток!
Увлекаюсь Лиспом, пишу на стареньком LisBox. Сам язык программирования просто божественный, но отсутствие как такового графического интерфейса вроде WindowForm сильно огорчает (варианты с LispWorks и AllegroCL отпали из-за дороговизны первого и убогости второго). Отчаянно пытался подключить GTK3, но так и не получилось, нормального описания для Tcl не нашёл, да и он то же криво работает. Может кто-нибудь помочь и пошагово описать, как надо установить GTK или Tcl, чтобы всё работало! Если для этого надо перейти на другую версию Лиспа, то не вопрос - давно смотрю в сторону SBCL. Да и хоть какой-нибудь адекватный мануал так же будет не лишним.
У самого у меня есть идея как связать WindowForm с Лисповым кодом, но не смог найти функции в Лиспе, которая по аналогии с С++ указывала бы на адрес ячейки памяти, в которой хранится значение переменной. Может кто знает?
За помощь буду безгранично признателен!
Решение задачи: «Оконные приложения для Лисп»
textual
Листинг программы
- (defn show-timer ()
- (defmacro toString (s) (java s "toString"))
- (defmacro calendar () (java (class "java.util.Calendar") "getInstance"))
- (def dateFormat (java (class "java.text.SimpleDateFormat") "new"
- (toString "HH:mm:ss")))
- (defmacro get-time () (java dateFormat "format" (java (calendar) "getTime")))
- (def label (java (class "javax.swing.JLabel") "new"))
- (java label "setText" (toString " hh:mm:ss "))
- (def font (java (class "java.awt.Font") "new" (toString "Tahoma") 1 58))
- (java label "setFont" font)
- (java label "setForeground" (java (class "java.awt.Color") "new" 255 0 0))
- (defn update-time ()
- (java label "setText" (get-time))
- (java (class "java.lang.Thread") "sleep" 1000)
- (update-time))
- (def window (java (class "javax.swing.JFrame") "new"))
- (java window "setLayout" (java (class "java.awt.FlowLayout") "new"))
- (java window "add" label)
- (java window "setVisible" true)
- (java window "pack")
- (update-time))
- (show-timer)
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д