第 3 章:定义和调用函数
这一章计算两个数的平方和。例如,输入 3 和 4,应得到 3 × 3 + 4 × 4 = 25。把这段计算写成函数,就能换一组输入继续使用。
先读懂一个参数的函数
平方函数的定义如下:
「平方」乃化「整数」而「整数」也。
「平方」者会「数」而「乘」于「数」于「数」也。
化「整数」而「整数」 表示接收整数、返回整数。会「数」而…… 给输入参数起名为 「数」,后面的表达式计算返回值。函数体的结果就是函数的结果,不需要另外写返回语句。
调用写成 「平方」于「三」。定义函数使用 会,调用函数使用 于,要分清两者。
接收两个参数
下面是本章的完整程序:
寻观「标准库」之书。
「平方和」乃化「整数」而化「整数」而「整数」也。
「平方和」者会「甲」而会「乙」而
虑「甲方」者「乘」于「甲」于「甲」而
虑「乙方」者「乘」于「乙」于「乙」而
「加」于「甲方」于「乙方」也。
「打印行」于(「整数表示」于(「平方和」于「三」于「四」))。
运行后输出 25。两个 会 依次接收参数,调用处的两个 于 按同样的顺序传入 3 和 4。
函数类型也按这个顺序阅读:先接收一个整数,再接收一个整数,最后返回整数。更准确地说,只传入第一个参数时,得到的是一个等待第二个参数的函数。因此 「平方和」于「三」 本身仍然是函数。
用局部名称保存中间结果
虑「甲方」者……而…… 先计算 者 后的表达式,把结果命名为 「甲方」,然后在 而 后的表达式中使用它。本例依次得到 甲方 = 9、乙方 = 16,最后相加。
这些名称只在对应的局部范围内可用,文件末尾不能直接打印 「甲方」。局部名称特别适合把长表达式拆成几个有明确含义的步骤。
给嵌套调用加括号
「加」于(「乘」于「二」于「三」)于「四」
这表示先算 2 × 3,再加 4。连续的 于 属于同一串调用;如果要把另一次调用的结果作为参数,就用括号把它括起来。缩进不能改变调用的分组。
练习
定义 「立方」,再写 「立方和」 调用它。输入 2 和 3 时应得到 35。尽量让立方和只负责调用和相加,不重复写两份乘法。需要排查结果时,可以先单独打印两个立方的结果。