LINUX.ORG.RU

ltk

 


0

1

Здравствуйте,

(defun string-to-number (n)
  (car (list (read-from-string n))))

(defun sum (a b)
  (+ (string-to-number a) (string-to-number b)))

(defvar s)
(setq s 0)

(defun ltksum()
  (with-ltk ()
    (let* ((bar (make-instance 'frame))
	   #-:tk84
	   (e1 (make-instance 'entry :master bar))
	   (e2 (make-instance 'entry :master bar))
	   (b4 (make-instance 'button
			      :master bar
			      :text "Sum"
			      :command (lambda ()
					 (setf s (sum (text e1) (text e2))))))
	   (l (make-instance 'label
			     :master bar
			     :text s)))
(pack bar)
(pack e1 :side :left)
(pack e2 :side :left)
(pack b4 :side :left)
(pack l :side :left)
)))
не могу сделать так чтобы при нажатии кнопки переменная s менялась синхронно.



Последнее исправление: Deleted (всего исправлений: 1)
Ответ на: комментарий от monk

Вот результат

The variable L is unbound. [Condition of type UNBOUND-VARIABLE]

(defun ltksum()
  (with-ltk ()
    (let* ((bar (make-instance 'frame))
	   #-:tk84
	   (e1 (make-instance 'entry :master bar))
	   (e2 (make-instance 'entry :master bar))
	   (b4 (make-instance 'button
			      :master bar
			      :text "Sum"
			      :command (lambda ()
					 (setf
					  (sum (text e1) (text e2))))
	      (setf (text l) s)))
	   (l (make-instance 'label
			     :master bar
			     )))
(pack bar)
(pack e1 :side :left)
(pack e2 :side :left)
(pack b4 :side :left)
(pack l :side :left)
)))
saufesma
() автор топика
Ответ на: комментарий от saufesma

A с таким

(b4 (make-instance 'button
			      :master bar
			      :text "Sum"
			      :command (lambda ()
					 (setf
					  (text l) (sum (text e1) (text e2))))
			      ))
Execution of a form compiled with errors. Form: (LET* ((BAR (MAKE-INSTANCE 'FRAME)) (E1 (MAKE-INSTANCE 'ENTRY :MASTER BAR)) (E2 (MAKE-INSTANCE 'ENTRY :MASTER BAR)) (L (MAKE-INSTANCE 'LABEL :MASTER BAR)) (B4 (MAKE-INSTANCE 'BUTTON :MASTER BAR :TEXT «Sum» :COMMAND (LAMBDA () (SETF (TEXT L) (SUM (TEXT E1) (TEXT E2)))))) (PACK BAR) (PACK E1 :SIDE :LEFT) (PACK E2 :SIDE :LEFT) (PACK B4 :SIDE :LEFT) (PACK L :SIDE :LEFT)) ) Compile-time error: The LET* binding spec (PACK E1 :SIDE :LEFT) is malformed. [Condition of type SB-INT:COMPILED-PROGRAM-ERROR]

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

Скобки не стыкуются... И насчёт UNBOUND-VARIABLE действительно проблема. Имя l должно быть видно до определения b4.

То есть должно быть


(defun ltksum()
  (with-ltk ()
    (let* ((bar (make-instance 'frame))
	   #-:tk84
	   (e1 (make-instance 'entry :master bar))
	   (e2 (make-instance 'entry :master bar))
           l
	   (b4 (make-instance 'button
			      :master bar
			      :text "Sum"
			      :command (lambda ()
					 (setf
					  s (sum (text e1) (text e2)))
	                                 (setf (text l) s)))))
      (setf l (make-instance 'label :master bar :text 0))
      (pack bar)
      (pack e1 :side :left)
      (pack e2 :side :left)
      (pack b4 :side :left)
      (pack l :side :left))))

monk ★★★★★
()
Ответ на: комментарий от monk
(defun ltksum()
  (with-ltk ()
    (let* ((bar (make-instance 'frame))
	   #-:tk84
	   (e1 (make-instance 'entry :master bar))
	   (e2 (make-instance 'entry :master bar))
           l ;;;; вот это место очень интересно, l = nil???
             ;;;; или l = b4
	   (b4 (make-instance 'button
			      :master bar
			      :text "Sum"
			      :command (lambda ()
					 (setf
					  s (sum (text e1) (text e2)))
	                                 (setf (text l) s)))))
      (setf l (make-instance 'label :master bar :text 0))
      (pack bar)
      (pack e1 :side :left)
      (pack e2 :side :left)
      (pack b4 :side :left)
      (pack l :side :left))))

Вообще круто, простенько

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