📄 一句话概括
7 条特征按支持程度打分:满分 14、Python 实得 9;扣掉的 5 分里有 4 分在【表达式】和【副作用】上——那才是命门。
📝 本节和前面几节的关系
A.3~A.9 逐条讲完,这一节汇总打分,把 7 条压成两个问题。
一、实测:14 分得 9 分
完全支持 3 条(各 2 分):用函数编写程序、函数作为值、组合函数与参数。 部分支持 3 条(各 1 分):都是表达式、没有副作用、模式匹配与递归。 不支持 1 条(0 分):自动类型推断。 合计 9/14。
二、那 5 分扣在哪
表达式那一条扣 1 分:if/for 还是语句。
副作用那一条扣 1 分:语言不强制,只靠自觉。
模式匹配与递归扣 1 分:match 是后来补的,且没有尾递归优化。
类型推断扣 2 分:完全没有。
所以短板集中在【约束】上——函数式的力量来自限制,Python 不爱限制。
三、压成两个问题
① 有没有语句? 有,代码就不能随便嵌。 ② 允不允许随便改东西? 允许,就没法保证同输入同输出。 两问都过,才算函数式。 两问都不过,也不妨碍你借它的手法——推导式、纯函数、不可变,今天就能用。
四、动手 Demo:对7个特征的总结
按 2/1/0 三档给 7 条特征打分。 算总分,并统计各档条数。
rows = [("1 用函数编写程序", 2), ("2 所有表达式都有值", 1),
("3 函数作为值", 2), ("4 组合函数与参数", 2),
("5 没有副作用", 1), ("6 模式匹配与递归", 1),
("7 自动类型推断", 0)]
print(sum(b for a, b in rows), 2 * len(rows)) # 9 14
实跑输出:
--------------------------------------------------------------------
对7个特征的总结
--------------------------------------------------------------------
把 7 个特征按支持程度打分(2 = 完全支持,1 = 部分,0 = 没有):
特征 得分
----------------------------
1 用函数编写程序 2
2 所有表达式都有值 1
3 函数作为值 2
4 组合函数与参数 2
5 没有副作用 1
6 模式匹配与递归 1
7 自动类型推断 0
满分 14 分
实得 9 分
完全支持 3 个
部分支持 3 个
不支持 1 个
**9 分/14 分**——**扣掉的 5 分里,一半在【表达式】和【副作用】上,那才是命门。**
**所以判断一个语言【像不像函数式】,只要问两句:**
**① 有没有【语句】? ② 允不允许随便改东西?** 两问都过,才算。
实测:满分 14、实得 9 分;完全支持 3 条、部分 3 条、不支持 1 条。 扣分集中在【约束】上:函数式的力量来自限制,Python 不爱限制。 压成两个问题:有没有语句、允不允许随便改。
30 秒实验
- 用这张 7 行表给你常用的另一门语言也打一次分。
- 看看哪一条它比 Python 强、哪一条更弱。
常见误区
- 把 9 分当成【Python 不够好】。这是设计取向,不是缺陷。
- 以为分数高就一定好用。纯函数式语言写业务系统很吃力。
自测三问(点开对答案)
1. 满分与实得各是多少? —— 满分 14、实得 9。 2. 扣分集中在哪? —— 表达式(1)、副作用(1)、模式匹配与递归(1)、类型推断(2),都在约束上。 3. 两个终极问题是什么? —— 有没有语句、允不允许随便改东西。- ☐ A.11 函数式语言的分类
相关笔记
- 函数式语言的7个特征 — 同一张表的不打分版
- 函数式语言的分类 — 按副作用分三类
- 享受需要动脑的软件开发 — 判断的标准
- 🧩 面向对象是怎样工作的 · 索引