【发布时间】:2015-12-15 22:58:40
【问题描述】:
我的问题是:
如何设置 REPL 打印输出的精度?
作为一个例子,这里有这个简单的函数:
(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))
如果我调用(gaussian 5 5 1),我的输出如下:
#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))
而我想得到:
#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))
如果您有答案,能否请您告诉我这些“REPL 自定义”记录在哪里?
(SBCL 1.2.11;Emacs 25 上的 Slime)
【问题讨论】:
-
旁注:您的
loops 可能更好地表达为dotimes:(dotimes (i rows) (dotimes (j cols) #| .... |#)。 -
你可以使用
(loop for i from 0 below rows...(from 0是可选的)而不是(loop for i from 0 to (- rows 1)...或(如果你绝对想在你的范围内做算术)(1- rows)。
标签: lisp common-lisp number-formatting