前一章 里,你学会了用计算机语言构造 嵌入的 表达式。

在这一章里,你将学会如何命名表达式。

但在此之前,你需要明白为什么给表达式起名字很重要。其中一个原因是,如果没有命名表达式,计算机编程很快就变得一团糟。

当你命名表达式时,计算机编程将会变得更有条理(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 是一个 操作符 ,它告诉计算机给 表达式 起一个 名字 。 ( defdefine 的缩写)。

为了使用 def ,你需要以某种方式构建一个表达式,就像在前一章你使用 +* 一样:使用 第一章 介绍的 表达式的三个步骤 :

1、首先,你需要告诉计算机你想执行某些东西。因此你要使用括号: ()

2、然后,你还需要告诉计算机执行的 操作 :这个例子里,操作是 def

3、最后,你要告诉计算机 def 操作的操作数是什么:第一个操作数是你要命名表达式的 名字 ,第二个操作数是你要起名字的 表达式

综上所述:

(def a (+ 3 4))

你能看到表达式的三个部分吗?

1、 () 2、 def 3、 第一个操作数: a, 第二个操作数 (+ 3 4)

恭喜恭喜!这是你第一次给表达式起名字。

现在,尝试用不同的名字:你可以把 a 替换成 bc 或是你的名字。

你也可以把 (+ 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.