函数式与过程式编程区别之不同的世界观

大名鼎鼎的 objc.io 有一本书叫做 Functional Swift,只看到这个名字很容易误导人以为 Swift 可以是 Functional 的,但事实上这压根不可能,那本书更准确的名称应该是 Functional part of Swift。一个过程式语言可以拥有函数式的功能,特别是一些比较新的语言 Python Ruby 就曾经因为带有这些功能让人觉得更高级,同时也会被一些人评价说他们只不过实现了一些古老语言早就有的功能。这个评价是客观事实,早期从理论研究中诞生的编程语言大多都很函数式,局部变量和赋值这种过程式的功能仅仅是他们的一小部分。大规模应用于实践之后诞生的编程语言则完全将这一局面翻转了过来,完全是建立在局部变量和赋值之上的过程式,慢慢发展之后才开始增加一些函数式的功能。

阅读更多

用高阶函数解八皇后问题

八皇后问题是求在八行八列的国际象棋棋盘上放置八个皇后,令她们彼此之间不能相互被吃的所有方法。国际象棋中皇后可以顺着横竖对角线方向行进任意距离。

阅读更多

那些「绝对」的和「相对」的

这个世界上所有事物都是相对的,只有「相对」本身是绝对的
接盘侠日记

阅读更多

一些有趣的问题在Swift中的表现

1. 排序过的数组遍历更快

实验

阅读更多

函数式与过程式编程区别之赋值行为

对于常见的过程式编程语言赋值行为和定义变量是同一种形式,都是用等号进行。对于函数式编程语言来说定义和赋值有着显著区别。

阅读更多

复合数据分层设计求数独解的例子

由编程语言自带的数据结构种类有限,在解决实际问题中设计适和的复合数据类型更有利于程序的组织和迭代。复合数据的分层设计一般可以分为三层:最底层是复合数据的实现,上层是复合数据的使用方法,最上层是复合数据使用方法的应用。

阅读更多

用过程复合数据

复合数据只要拥有满足一定条件的构造函数、选择函数和约束规则,甚至不需要是由基本数据复合,church 计数是一个以 lambda 表达式为唯一元素,构建数值、数值运算等编程要素的系统,在church 计数中 0 和 加1 运算分别被定义为

阅读更多

构建过程抽象

3)将有关认识与那些在实际中和他同在的所有其他认识隔离开,这就是抽象
SICP 第一章
现存的许多威力强大的程序设计技术,都依赖于填平在「被动的」数据和「主动的」过程之间的传统划分
SICP 第一章

阅读更多

递归、动态规划和迭代

每一个计算机程序都是现实中或者精神中的某一个过程的一个模型
SICP 序
在这一层次的课程里,最基本的材料并不是特定的程序设计语言语法,不是有效计算某种功能的巧妙算法,也不是算法的数学分析或者计算的本质,而是一些能够用于控制大型软件系统的智力复杂性的技术
SICP 前言

阅读更多

有关动力的模型

缘起

可能和许多人一样我也有一些曾经想要学习然而却最终没有去进行学习的目标,需要举起例子的话很容易,不过我更想弄明白的是这些例子背后共通的原因。这就引发了我对动力的思考。

阅读更多