LINUX.ORG.RU

странный вывод результата

 


0

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

(defun degrees-minutes-seconds-to-radians (d m s)
  (+ (* (string-to-number d) (/ pi 180))
     (* (string-to-number m) (/ pi (* 180 60)))
     (* (string-to-number s) (/ pi (* 180 60 60)))
     ))

;;;(let* ((n 4)
   ;;;      (m (expt 10 n)))
      ;;;(/ (fround 0.2398476566 (/ 1 m)) m))

;;; Round a flout number to required number of digits
(defun my-round (x digits)
(let* ((n (string-to-number digits))
         (m (expt 10 n)))
      (/ (fround x (/ 1 m)) m)))


(defun dms ()
  (with-ltk ()
    (let* ((window (make-instance 'frame))
	   #-:tk84
	 ;;;; Explanation
	 (fcriteria (make-instance 'frame :master window))
	 (criteria (make-instance 'label
				  :master fcriteria
				  :width 60
				  :text "rad = aº * (π / 180) + a' * (π / (180 * 60) + a'' * (π / (180 * 60 * 60))"))
	   (fdigits (make-instance 'frame :master window))
	   (before-digits (make-instance 'label
					 :master fdigits
					 :text "Округлить до "))
	   (e-digits (make-instance 'entry
				    :master fdigits
				    :width 1))
	   (after-digits (make-instance 'label
					:master fdigits
					:text " знаков после запятой"))
	 ;;;; ENTER DATA
(fdms (make-instance 'frame :master window))
(e-degrees (make-instance 'entry
			  :master fdms
			  :width 3))
(e-minutes (make-instance 'entry
			  :master fdms
			  :width 2))
(e-seconds (make-instance 'entry
			  :master fdms
			  :width 2))
(l-d (make-instance 'label
		    :master fdms
		    :text "º "))
(l-m (make-instance 'label
		    :master fdms
		    :text "' "))
(l-s (make-instance 'label
		    :master fdms
		    :text "''"))
(l1 (make-instance 'label
		   :master fdms
		   :text " = "))
(l2 (make-instance 'label
		   :master fdms
		   :text " rad"))
a
r
rslt
(b1 (make-instance 'button
		   :master window
		   :text "Run"
		   :command (lambda ()
			      (setf
			       a (degrees-minutes-seconds-to-radians
				  (text e-degrees)
				  (text e-minutes)
				  (text e-seconds)))
			      (setf r (my-round a (text e-digits)))
			      (setf (text rslt) r)))))

(setf rslt (make-instance 'label :master fdms :text 0))

(pack window)
(pack fcriteria)
(pack criteria)
(pack fdigits)
(pack before-digits :side :left)
(pack e-digits :side :left)
(pack after-digits :side :left)
(pack fdms)
(pack e-degrees :side :left)
(pack l-d :side :left)
(pack e-minutes :side :left)
(pack l-m :side :left)
(pack e-seconds :side :left)
(pack l-s :side :left)
(pack l1 :side :left)
(pack rslt :side :left)
(pack l2 :side :left)
(pack b1))))

результат будет иметь d0 в конце результата, как это убрать?

как это убрать

Используй format. Кстати говоря, если тебе округлять нужно было только для вывода, то это тоже делается через format.

no-such-file ★★★★★
()
Последнее исправление: no-such-file (всего исправлений: 1)
Ответ на: комментарий от no-such-file
(b1 (make-instance 'button
		   :master window
		   :text "Run"
		   :command (lambda ()
			      (setf
			       a (degrees-minutes-seconds-to-radians
				  (text e-degrees)
				  (text e-minutes)
				  (text e-seconds)))
			      (setf r (my-round a (text e-digits)))
			      (setf (text (format nil "~D" rslt)) r)))))

There is no applicable method for the generic function #<STANDARD-GENERIC-FUNCTION (COMMON-LISP:SETF LTK:TEXT) (7)> when called with arguments (0.07d0 «#<LABEL {1005415553}>»). [Condition of type SIMPLE-ERROR]

не пролезло

saufesma
() автор топика
Ответ на: комментарий от no-such-file
(b1 (make-instance 'button
		   :master window
		   :text "Run"
		   :command (lambda ()
			      (setf
			       a (degrees-minutes-seconds-to-radians
				  (text e-degrees)
				  (text e-minutes)
				  (text e-seconds)))
			      (setf r (my-round a (text e-digits)))
			      (setf (text rslt) (format nil "~D" r))))))

проблема та же

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

Это же text прикручивает d0 к результату.

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

~f control не нашёл

А где искал? Кстати, как я уже сказал, то если тебе только вывести нужно с округлением, то можно

(format nil (format nil "~~,~df" 3) 0.234756)
"0.235"
no-such-file ★★★★★
()
Последнее исправление: no-such-file (всего исправлений: 1)
Ответ на: комментарий от den73

Так не правильно, это интригует. Существует двигатель Стирлинга, город Stirling в Шотландии, также Стирлинг является фамилией некоторых людей.

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

Я думал ты импортный, а что такое Фет, не сообразил, толстый как-то не подходит.

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

Двигатель. Просто я написал вот такую программу на CL https://bitbucket.org/budden/cl-stirling-engine , к-рая в том числе рассчитывает некоторые механизмы. И она запускается из моей IDE для CL, написанной на tcl/tk https://bitbucket.org/budden/iar . Я вот и подумал, что твои занятия как-то связаны с этим.

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

Когда-то слышал о двигателе Стирлинга. А я занимаюсь тем, что в России уже сдохло и люди которые этим занимались уже умерли, лёгкая промышленность, от которой рожки да ножки остались. Осталось пару факультетов в Иваново, готовят там только ремонтников оборудования. Если попадалась мат модель движения волокна в чёсальной машине, я был бы рад посмотреть. У самого времени нет, столкнулся с производством и людьми там работающих, задача ещё та. Они там довольно специфичные, ревнивые, сначала вроде разговаривают, а как 3Д модель увидят и всё. Машина выглядит простенько, а по сложности кинематики следует за печатными прессами. Обидно видать им.

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