需要对Lisp中的反向科学计数函数进行解释

时间:2018-07-17 10:39:14

标签: scheme lisp explain sicp r5rs

这是我具有的功能,可以理解为从1)您的系数和2)您的指数出发,然后从科学计数法中提取数字。

示例:

coefficient 7, 
exponent 3 

7 * 10^3 = 7000

(define (scientific coeffiecent exponent) (* coefficient (expt 10 exponent)))

这正是我所苦苦挣扎的:反其道而行之的功能,从7000到用于将其转化为科学计数法的系数和指数。我已经通过网络实现了工作功能,但真的很难完全理解它。

(define (sci-exponent number)
  (floor (/ (log number) (log 10))))

(define (sci-coefficient number)
  (/ number (expt 10 (sci-exponent number))))

如果有人可以帮助我理解,将不胜感激!感谢您阅读任何一种方式!

1 个答案:

答案 0 :(得分:2)

看一下sci-exponent的主体,它以log(number)/ log(10)为底。您可能在数学课上还记得:log a (n1)/ log a (n2)= log n2 (n1)。因此,您得到的是log 10 (数字),其底数是number的位数减去1,这将是科学计数法的指数。

然后可以轻松地从指数中得出系数。正如您所写,coeff * exp = number,然后是number / exp = coeff,这正是sci-coefficient正在实现的目标。