2013-04-22 64 views
2

的这工作得很好:得到一个字符串,而不是一个数量

[1]> ((lambda (x) (/ x x)) 5) 
1 

但这:

[2]> ((lambda (x y) (/ x y)) 5 2) 
5/2 

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

+0

这不是一个字符串,它是一个有理数。 – Barmar 2013-04-22 18:56:35

+0

你能解释一下吗?我刚开始学习这门语言。 – edem 2013-04-22 18:59:11

回答

8

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

((lambda (x y) (float (/ x y)) 5 2) 

((lambda (x y) (/ x y)) 5.0 2) 

理性算术通常比浮点更精确。考虑这个:

(setf x1 (/ 1 3)) => 1/3 
(setf x2 (float (/ 1 3)) => 0.33333333 
(* x1 3) => 1 
(* x2 3) => 0.99999999 
+0

非常感谢您的解释。 – edem 2013-04-22 19:03:36

相关问题