Moje pytanie brzmi:
Jak ustawić precyzję wydruków REPL?Jak sformatować dokładność cyfry mojego pliku REPL w Lisp?
Jako przykład, ta prosta funkcja tutaj:
(defun gaussian (rows cols sigma)
(let ((filter (make-array `(,rows ,cols)))
(rowOffset (/ (- rows 1) 2.0))
(colOffset (/ (- cols 1) 2.0)))
(loop for i from 0 to (- rows 1)
do (loop for j from 0 to (- cols 1)
do (setf (aref filter i j)
(gaussDistVal i j rowOffset ColOffset sigma))))
filter))
Jeśli zadzwonię (gaussian 5 5 1)
, mój wynik jest następujący:
#2A((0.01831564 0.082085 0.13533528 0.082085 0.01831564)
(0.082085 0.36787945 0.60653067 0.36787945 0.082085)
(0.13533528 0.60653067 1.0 0.60653067 0.13533528)
(0.082085 0.36787945 0.60653067 0.36787945 0.082085)
(0.01831564 0.082085 0.13533528 0.082085 0.01831564))
Zważywszy chciałbym dostać:
#2A((0.0 0.1 0.1 0.1 0.0)
(0.0 0.4 0.6 0.4 0.1)
(0.1 0.6 1.0 0.6 0.1)
(0.0 0.4 0.6 0.4 0.1)
(0.0 0.1 0.1 0.1 0.0))
Jeśli masz odpowiedź, możesz również powiedzieć, gdzie znajdują się te "dostosowania REPL" Ed?
(SBCL 1.2.11; Slime na Emacs 25)
Side: twoje 'loop's może być lepiej wyrażone jako' dotimes': '(dotimes (i rows) (dotimes (j cols) # | .... | #) '. – Svante
Możesz użyć' (pętla for i od 0 poniżej wierszy ... '(i' od 0' jest opcjonalne) zamiast '(pętla dla i od 0 do (- wiersze 1) ...' lub (jeśli absolutnie chcesz robić arytmetyczną na twoich granicach) '(1-wiersze)'. – Vatine