第六章:函数(生日快乐)
目前为止,你学会了如何使用各种操作去写表达式,例如: list
, +
, *
, -
, /
和 quote
。
今天,你将学会如何定义自己的操作。
有两种类型的操作:
1、函数 2、宏
在这一章里,我们先学习函数。
我们为什么需要函数?
你想知道自己按天数算的年龄是多少。这是不是很简单?你用年龄的年数乘以 365 天(一年的天数)。
如果你 9 岁,按天数算的年龄是:
(* 9 365)
如果你家里有个 1.5 岁的小孩,他按天数算的年龄是:
(* 1.5 365)
每次都写 (* x 365)
类似这样的非常麻烦。这就是为何我们需要函数。
一个函数就像是可以套用任何东西的公式。
在这个例子里,计算的公式是:按年计算的年龄乘以 365。
如何定义函数?
下面是如何定义一个函数,得到按天计算的年龄:
#(* % 365)
定义函数的结构是:
- 前置一个
#
(井号标签) - 插入一个表达式
- 在表达式里,
%
表示函数的参数
注意:
#
必须进跟着表达式,不能有任何的空格。
跟我对待表达式一样:我们可以给函数起个名字,使用 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.