как округлить число в Lisp
Не могу округлить число 0.2398476566 до 4 знаков после запятой Truncate round не помощники, у меня это точно.
Не могу округлить число 0.2398476566 до 4 знаков после запятой Truncate round не помощники, у меня это точно.
Как вывести на экран, посредством 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 знака после запятой или это ещё
какое-то искажение.~%")
)
(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
Здравсвуйте,
Всё не могу понять зачем мне это надо, но 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)))
Ltk тоже написан на CLOS и тоже самое. Код уже вывесил.https://www.linux.org.ru/forum/development/14694129
Здравствуйте,
(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)
)))
| ← назад |