LINUX.ORG.RU

Сообщения saufesma

 

Ltk нужен наилучший метод вывода данных

Форум — Development

Как вывести на экран, посредством lable или canvas, а потом вывести на печать.

;;; Вывод полученных данных

(progn
  (format t "Стойка ~,6F, мм~%" *L1*)
  (format t "Кривошип ~,6F, мм~%" *L2*)
  (format t "Шатун ~,6F, мм~%" *L3*)
  (format t "Коромысло ~,6F, мм~%" *L4*)
  ;;;(format t "Проверка выбранных размеров кривошипа,
            ;;    шатуна, коромысла, стойки. Если t, полученные
             ;;   данные принимаются ~A.~%" *prov*)
  (format t "Шаг разбивки окружности ~,6F, мм~%" *step*)
  (format t "Частота вращения ~,6F, об/мин~%" *n*)
  (format t "Время пуска ~,6F, с~%" *time*)
        (format t "Максимальный угол φ4max = ~,6F. рад~%" *phi4-max*)
	(format t "Минимальный угол φ4min = ~,6F. рад~%" *phi4-min*)
	(format t "Угол φ2 при максимальном φ4. φ2max = ~,6F. рад~%" *phi2-max*)
	(format t "Угол φ2 при минимальном φ4.  φ2min = ~,6F. рад~%" *phi2-min*)
	(format t "Угол поворота коромысла ~,6F. рад~%" *angle*)
  (format t "Максимальная угловая скорость ω3max = ~,6F. 1/c~%" *omega3-max*)
  (format t "Максимальная угловая скорость ω4max = ~,6F. 1/c~%" *omega4-max*)
  (format t "Максимальное угловое ускорение ε3max = ~,6F. 1/c^2~%" 
		*epsilon3-max*)
  (format t "Максимальное угловое ускорение ε4max = ~,6F. 1/c^2~%" 
	  *epsilon4-max*)
  (format t "Выдача данных расчёта несколько искажена format поэтому 
              нужно брать цифру до 4 знака после запятой или это ещё 
             какое-то искажение.~%")
  )

 

saufesma
()

Ltk не могу понять, что не работает

Форум — Development
(progn 
;;=========Для расчёта геометрии четырёхзвенного механизма==============
  (defvar *L1*)  ;;стойка, мм
  (defvar *L2*)   ;;кривошип, мм
  (defvar *L3*)  ;;шатун, мм
  (defvar *L4*)   ;;коромысло, мм
  (defvar *step*) ;;шаг угла поворота, рад  
  (defvar *tmp-lst-of-val-PHI2*) 
  (defvar *lst-of-val-PHI2*) ;; Лист углов кривошипа φ2 за один оборот
  (defvar *tmp-val-PHI2*)       ;; угол 0рад в листе отсутсвует
  (defvar *lst-of-angles-tg-PHIs*) ;;лист значений тангенса угла tg(PHIs)
  (defvar *lst-val-PHIs*) ;;Лист значений угла PHIs
  (defvar *lst-of-vector-s*) ;;лист значений вектора s
  (defvar *lst-val-PHI4s*) ;;лист значений PHI4s
  (defvar *lst-val-PHI3s*)  ;;лист значений PHI3s
  (defvar *lst-val-PHI4*)  ;;Лист значений углов PHI4 рад
  (defvar *lst-val-PHI3*)  ;;лист значений углов PHI3 рад
  (defvar *count-max*) ;;счёт листа начинается с 0.
  (defvar *count-min*)
  
  (setq *tmp-lst-of-val-PHI2* nil) 
  (setq *lst-of-val-PHI2* nil);; Лист углов кривошипа φ2 за один оборот
  (setq *tmp-val-PHI2* 0.0)       ;; угол 0рад в листе отсутсвует
  (setq *lst-of-angles-tg-PHIs* nil) ;;лист значений тангенса угла tg(PHIs)
  (setq *lst-val-PHIs* nil) ;;Лист значений угла PHIs
  (setq *lst-of-vector-s* nil) ;;лист значений вектора s
  (setq *lst-val-PHI4s* nil) ;;лист значений PHI4s
  (setq *lst-val-PHI3s* nil)  ;;лист значений PHI3s
  (setq *lst-val-PHI4* nil)  ;;Лист значений углов PHI4 рад
  (setq *lst-val-PHI3* nil)  ;;лист значений углов PHI3 рад
  (setq *count-max* 0) ;;счёт листа начинается с 0.
  (setq *count-min* 0))
  ;;;============ввод данных=======================
  ;;; Проверка на число
  (defun string-to-number (n)
    (car (list (read-from-string n))))

  (defun alarm ()
    (do-msg "Введите число"))
  
(with-ltk ()
  (let* ((window (make-instance 'frame))
    #-:tk84
    ;;стойка, мм
    (base (make-instance 'label :master window
			        :text "Стойка: "))
    (e-base (make-instance 'entry :master window))
    (base-units (make-instance 'label :master window
			              :text "мм"))
  ;;кривошип, мм
  (crank (make-instance 'label :master window
		              :text "Кривошип: "))
  (e-crank (make-instance 'entry :master window))
  (crank-units (make-instance 'label :master window
			             :text "мм"))
  ;;шатун, мм
  (bar (make-instance 'label :master window
		      :text "Шатун: "))
  (e-bar (make-instance 'entry :master window))
  (bar-units (make-instance 'label :master window
			    :text "мм"))
  ;;коромысло, мм
  (beam (make-instance 'label :master window
		       :text "Коромысло: "))
  (e-beam (make-instance 'entry window))
  (beam-units (make-instance 'label :master window
			     :text "мм"))
 

  (divide-step (make-instance 'label :master window
		       :text "Шаг разбивки окружности: "))
  (e-divide-step (make-instance 'entry window))
  (divide-step-units (make-instance 'label :master window
				    :text "рад"))

  (b1 (make-instance 'button
		     :master window
		     :text "Поехали"
		     :command (lambda ()
				(progn
				  ;;стойка, мм
				  (if (numberp (string-to-number
						       (text e-base)))
					     (setf *L1* (string-to-number
						      (text e-base)))
					     (alarm))

				  ;;кривошип, мм
				  (if (numberp (string-to-number
						       (text e-base)))
					     (setf *L2* (string-to-number
						      (text e-crank)))
					     (alarm))

				  ;;шатун, мм
				  (if (numberp (string-to-number
						       (text e-base)))
					     (setf *L3* (string-to-number
						      (text e-bar)))
					     (alarm))

				  ;;коромысло, мм
				  (if (numberp (string-to-number
						       (text e-base)))
					     (setf *L4* (string-to-number
						      (text e-beam)))
					     (alarm))
				  
				  ;;Шаг разбивки окружности
				  (if (numberp (string-to-number
						       (text e-divide-step)))
				      (setf *step*
					       (string-to-number
						      (text e-divide-step)))
					     (alarm)))))))
    (pack window)
    (pack base)
    (pack e-base)
    (pack base-units)
    (pack crank)
    (pack e-crank)
    (pack crank-units)
    (pack bar)
    (pack e-bar)
    (pack bar-units)
    (pack beam)
    (pack e-beam)
    (pack beam-units)
    (pack divide-step)
    (pack e-divide-step)
    (pack divide-step-units)
    (pack b1)))

Не могу понять где у ошибки ноги растут?

keyword argument not a symbol: #<FRAME {10055CA4E3}>. [Condition of type SB-INT:SIMPLE-PROGRAM-ERROR]

и вот ещё

; in: WITH-LTK () ; (MAKE-INSTANCE 'LTK:ENTRY LTK::WIN) ; ; caught STYLE-WARNING: ; The function has an odd number of arguments in the keyword portion. ; ; caught STYLE-WARNING: ; The function has an odd number of arguments in the keyword portion. ; ; compilation unit finished ; caught 2 STYLE-WARNING conditions

 

saufesma
()

CLOS McCLIM и неизвестное

Форум — Development

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

Всё не могу понять зачем мне это надо, но Lisp просто под кожу залез, а тут ещё McCLIM. И вот здесь никак не могу понять, что я не могу понять, например

;;;;====McCLIM Guided Tour===========
(in-package :common-lisp-user)

(defpackage "HELLO"
(:use :clim :clim-lisp)
(:export "HELLO-MAIN"))

(in-package :hello)

(define-application-frame hello-world ()
  ((greeting :initform "Hello World"
	     :accessor greeting))
  (:pane (make-pane 'hello-world-pane :width 200 :height 50))) 
                                  ;;; ^ never miss it
(defclass hello-world-pane
  (clim-stream-pane) ())

;;; Behavior defined by the Handle Repaint Protocol
(defmethod handle-repaint ((pane hello-world-pane) region)
  (let ((w (bounding-rectangle-width pane))
	(h (bounding-rectangle-height pane)))
    ;; Blanc the pane out
    (draw-rectangle* pane 0 0 w h
		     :filled t
		     :ink (pane-background pane))
    ;; Draw greeting in center of pane
    (draw-text* pane
		(greeting *application-frame*)
		(floor w 2) (floor h 2)
		:align-x :center
		:align-y :center)))

(defun hello-main ()
(run-frame-top-level
 (make-application-frame 'hello-world)))
а как это работает ни в зуб ногой, хотя знаю что CLOS создаёт листы объектов выбирает наиболее specific то же самое делает с методами. Но чего-то не хватает чтобы что-то поймать в голове и разобрать как этот код работает так как привык, определять функции потом их вызвать в одном месте и получить результат, а сдесь как живой организм с генетическими причудами.

Ltk тоже написан на CLOS и тоже самое. Код уже вывесил.https://www.linux.org.ru/forum/development/14694129

 

saufesma
()

ltk

Форум — Development

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

(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 менялась синхронно.

 

saufesma
()

RSS подписка на новые темы