获取字符串而不是数字

ede*_*dem 2 lisp common-lisp

这很好用:

[1]> ((lambda (x) (/ x x)) 5)
1
Run Code Online (Sandbox Code Playgroud)

但是这个:

[2]> ((lambda (x y) (/ x y)) 5 2)
5/2
Run Code Online (Sandbox Code Playgroud)

给我'5/2'而不是2.5.我该如何解决?

Bar*_*mar 8

Common Lisp尽可能执行合理的算术运算.如果需要浮点,则必须至少提供一个浮点作为算术函数的输入,或者对结果使用显式强制函数.

((lambda (x y) (float (/ x y)) 5 2)
Run Code Online (Sandbox Code Playgroud)

要么

((lambda (x y) (/ x y)) 5.0 2)
Run Code Online (Sandbox Code Playgroud)

有理算术通常比浮点更精确.考虑一下:

(setf x1 (/ 1 3)) => 1/3
(setf x2 (float (/ 1 3)) => 0.33333333
(* x1 3) => 1
(* x2 3) => 0.99999999
Run Code Online (Sandbox Code Playgroud)