目前为止,你学会了如何使用各种操作去写表达式,例如: list, +, *, -, /quote

今天,你将学会如何定义自己的操作。

有两种类型的操作:

1、函数 2、宏

在这一章里,我们先学习函数。

Birthday

我们为什么需要函数?

你想知道自己按天数算的年龄是多少。这是不是很简单?你用年龄的年数乘以 365 天(一年的天数)。

如果你 9 岁,按天数算的年龄是:

(* 9 365)

如果你家里有个 1.5 岁的小孩,他按天数算的年龄是:

(* 1.5 365)

每次都写 (* x 365) 类似这样的非常麻烦。这就是为何我们需要函数。

一个函数就像是可以套用任何东西的公式。

在这个例子里,计算的公式是:按年计算的年龄乘以 365。

如何定义函数?

下面是如何定义一个函数,得到按天计算的年龄:

#(* % 365)

定义函数的结构是:

  1. 前置一个 # (井号标签)
  2. 插入一个表达式
  3. 在表达式里, % 表示函数的参数

注意: # 必须进跟着表达式,不能有任何的空格。

跟我对待表达式一样:我们可以给函数起个名字,使用 def

(def age-in-days #(* % 365))

然后我可以把函数 运用到任意数字:

(age-in-days 9)
(age-in-days 1.5)

也可以不用名字直接运用函数(这称为匿名函数):

(#(* % 365) 12)

你理解什么上面的代码片段会发生什么吗?

练习

A. 写一个名叫 hours->minutes 的函数 —— 小时转换成分钟:

()

B. 使用 hours->minutes 计算 12 小时是多少分钟:

()

C. 把 12 作为 A 问题里定义的函数的参数,不用函数名字:

()

D. 写一个名叫 minutes->hours 的函数 —— 分钟转换成小时:

()

E. 使用 minutes->hours 计算 6000 分钟是多少小时:

()

F. 把 6000 作为在问题 #E 定义的函数参数,不用函数名字:

()

Send us a screenshot with your programs to viebel@gmail.com.