第三章:给表达式起名字
在 前一章 里,你学会了用计算机语言构造 嵌入的 表达式。
在这一章里,你将学会如何命名表达式。
但在此之前,你需要明白为什么给表达式起名字很重要。其中一个原因是,如果没有命名表达式,计算机编程很快就变得一团糟。
当你命名表达式时,计算机编程将会变得更有条理(organized)。
问题:没有命名表达式,有时这会变得很糟糕。
看下面这个表达式。
(+ (* (+ 3 4) 7) (* (+ 3 4) 9) (* (+ 3 4) 5))
你有没有看到表达式 (+ 3 4)
重复了三次?
这样的重复使得这个表达式非常难以理解。
解决方法
解决这种糟糕表达式的方法是,给 (+ 3 4)
起个名字,然后使用这个名字代替它。
为了命名表达式,我们使用 def
操作符。像这样
(def a (+ 3 4))
(此时,请忽略 #'cljs.user/a
.)
然后使用 a
代替 (+ 3 4)
使得我们的表达式更简洁:
(+ (* a 7) (* a 9) (* a 5))
如何使用 def
def
是一个 操作符
,它告诉计算机给 表达式
起一个 名字
。 ( def
是 define
的缩写)。
为了使用 def
,你需要以某种方式构建一个表达式,就像在前一章你使用 +
和 *
一样:使用 第一章 介绍的 表达式的三个步骤 :
1、首先,你需要告诉计算机你想执行某些东西。因此你要使用括号: ()
。
2、然后,你还需要告诉计算机执行的 操作
:这个例子里,操作是 def
。
3、最后,你要告诉计算机 def
操作的操作数是什么:第一个操作数是你要命名表达式的 名字
,第二个操作数是你要起名字的 表达式
。
综上所述:
(def a (+ 3 4))
你能看到表达式的三个部分吗?
1、 ()
2、 def
3、 第一个操作数: a
, 第二个操作数 (+ 3 4)
恭喜恭喜!这是你第一次给表达式起名字。
现在,尝试用不同的名字:你可以把 a
替换成 b
、 c
或是你的名字。
你也可以把 (+ 3 4)
替换成其他表达式: (* 6 7)
或 (+ (* 7 2) (* 2 9))
。
使用名字
一旦你给了表达式起名字,你可以随处使用它。
这里,我们定义表达式 my-favourite-number
的名字是 18
:
(def my-favourite-number 18)
现在,我们把 10
加到 my-favourite-number
:
(+ my-favourite-number 10)
回到复杂的表达式
现在,我们重写我们刚开始提到的复杂表达式 (+ (* (+ 3 4) 7) (* (+ 3 4) 9) (* (+ 3 4) 5))
:
(def my-number (+ 3 4))
(+ (* my-number 7) (* my-number 9) (* my-number 5))
你觉得这是不是看起来更简洁?
当然,得到的结果还是跟原来的表达式一样:
(+ (* (+ 3 4) 7) (* (+ 3 4) 9) (* (+ 3 4) 5))
练习
如果在练习过程中遇到困难,请重新仔细地阅读 “表达式的三个步骤”。
A. 计算 (4 + 7 + 8)*3 + (4 + 7 + 8)*7 + (4 + 7 + 8)*9
()
你应该得到 361
。
B. 计算 (2*3 + 4)*3 + (2*3 + 4)*7 + (2*3 + 4)*9
()
你应该得到 190
。
C. 计算 2*3 + 4*5
. Then multiply the result by 4 + 5
.
()
你应该得到: 234
。
C. 计算 2*3 + 4*5
。 得到的结果跟 4 + 5
相乘。 然后再跟 19
相乘。
()
你应该得到: 4446
。
Send us a screenshot with your programs to viebel@gmail.com.