第1章 计算
Table of Contents
我们在 前言:如何编程 学习了如何编程,如下计算 1 + 2:
(+ 1 2)
计算结果:3
看下一段代码:
(+ 1 (+ 1 (+ 1 1) 2) 3 4 5)
计算结果 18
- 括号是可以嵌套的
- 基本运算可以带有多个参数,比如例子中的
(+ 1 2 3 4 5) - 参数不一定非得是数值,也可以是表达式,比如例子中的
(+ 1 (+ 1 1) 2)的(+ 1 1)部分就是表达式。
这个计算步骤:
(+ 1 (+ 1 (+ 1 1) 2) 3 4 5) == (+ 1 (+ 1 2 2) 3 4 5) == (+ 1 5 3 4 5) == 18
Drracket 的单步执行功能
Drracket 提供了单步执行功能,让我们可以看到每一步的计算结果。
本章后续将介绍4种原子类型数据(atomic data):数值、字符串、图片和布尔值。
这里的原子不是物理概念,你只需要知道你无法窥探原子类型数据的内部了,不理解也无所谓。
1.1 数值的计算
数值的四则运算
(+ 3 4) (- 4 3) (* 5 5) (/ 5 1) (/ 5 2)
执行结果:
7
1
25
5
2.5
数值的计算:三角函数等
(abs -1) (add1 10) (sin 0) (ceiling 11.1) ; 向上取整 (exact->inexact 1/2) ; 将不精确数转换为不精确数 (expt 10 2) ; 10的2次方 (expt 3 3) ; 3的3次方 (floor 11.9) ; floor 向下取整 (log 9 3) ;; 第2个参数为底数 (max 1 10 -100 3 4 999) (sqr -33) ;; 求平方
;表示注释,;后的代码不会被执行
代码执行结果:
1 11 0 12 #i0.5 100 27 11 #i2.0 999 1089
精确数
初级语言将数值分为
- 精确数(exact)
- 非精确数(inexact)
(log 9 3)的结果#i2.0就是非精确数,其值接近于2(sqrt 2)的结果#i1.4142135623730951也是非精确数
初级语言会尽可能将计算结果保存为精确值
帮助文档
如果你不知道某个函数的用途,可以 查阅帮助文档 .
习题1
定义笛卡尔坐标x y
(define x 3) (define y 4)
计算(x y)到原点的距离 \(\sqrt{x^2+y^2}\)
解答
(define x 3) (define y 4) (sqrt (+ (* x x) (* y y)))
结果:5