通过Go示例理解函数式编程思维

本文永久链接 – https://tonybai.com/2024/08/11/understand-functional-programming-in-go 一个孩子要尝试10次、20次才肯接受一种新的食物,我们接受一种新的范式,大概不会比这个简单。– 郭晓刚 《函数式编程思维》译者 函数式编程(Functional Programming, 简称fp)是一种编程范式,与命令式编程(Imperative Programming)、面向对象编程(OOP)、泛型编程(Generics Programming)、逻辑编程(logic Programming)等是一类的概念。 ...

August 11, 2024 · 21 min · Tony Bai

C程序员驯服Common Lisp – 函数

Common Lisp是函数式编程语言,其基本组成单元自然是函数。对Common Lisp函数的理解也是学习Common Lisp语言的关键。另外与C语言以内存单元修改为主要编程方法不同,Common Lisp的主要编程方法是将函数应用于参数。这里我们分别用两种范式风格实现同一个函数,该函数用于取得第n个fibonacci数(n从0开始): ...

September 23, 2011 · 11 min · Tony Bai

C程序员驯服Common Lisp – 变量

变量是C语言中最常用的、不可或缺的语言元素。C语言是命令式编程语言(imperative programming language),其基本编程方法是基于对内存单元的修改,而变量又恰是对内存单元的抽象表示,比如:“int a = 0xff"这行语句告诉我们在内存中有一块大小为4个字节的区域,该区域可以通过a这个变量直接访问,该区域初始时存储的值为0xff。由此看来C语言的主要操作就是变量操作。 ...

September 20, 2011 · 9 min · Tony Bai

C程序员驯服Common Lisp – 控制结构

光有表达式,我们依旧无法写出实用的程序,我们还缺少控制结构(Control Structures)。 C语言主要有三种控制结构:顺序结构、条件分支结构和循环结构。Common Lisp 也实现了类似的控制结构,我们逐一来看。 一、顺序结构 顾名思义,顺序结构中的语句或表达式是按其位置的先后顺序依次执行的,这也是最简单也最容易理解的一种结构。在C语言中,绝大多数代码块(code block)中的代码都是顺序结构的。Common Lisp程序由S-expressions组成,其本质上的执行过程为自左向右的求值过程。不过Common Lisp的代码编排风格会让给大家一种错觉:Common Lisp似乎也是顺序执行的,例如: ...

September 14, 2011 · 7 min · Tony Bai

C程序员驯服Common Lisp – 表达式

Common Lisp程序由一组表达式构成。在"入门“一文中我提到过:Common Lisp使用S-expressions作为表达式(Expressions)的基本语法格式。S-expressions由原子(atoms)和S-expressions列表组成,或者说原子和列表(List)是组成S-expression的基本元素。复杂的源程序都是由简单的表达式组成的,我们在学习编写实用的Common Lisp程序之前,首先要清楚简单表达式的结构和求值方法。 每个Lisp表达式都可以提交给Common Lisp解释器进行求值,并得到一个求值结果。这里我们从简单的原子说起。 ...

September 2, 2011 · 5 min · Tony Bai

C程序员驯服Common Lisp – 入门

毫无疑问,Common Lisp是一门庞大且复杂的语言,学习曲线并不平坦。对于一个从未接触过函数式语言、交互式语言以及动态类型语言的C程序员来说,学习Common Lisp显然是一个很大的挑战。 也许有人会问:"C语言已经无所不能了,为何还要学习Common Lisp?“在这里我不想说太多冠冕堂皇的话,至少对我而言,理由有三: 一是好奇,在C语言的世界里待得久了,总想探出头来吸几口新鲜空气,这次我选择了Common Lisp; 二是为了变成一名更好的程序员。为何学习Common Lisp就能成为一名更好的程序员呢?这不是我的观点,而是诸多牛人或大师们(包括Paul Graham、Peter Norvig以及另外一个Peter:Peter Seibel等)的观点。不过不管你们信不信,反正我是信了。这个观点的关键思想就是一门语言可以影响一个程序员的思维方式。我相信Common Lisp可以给我带来一种不同于以往的新的编程思维方式,这样至少比只有一种思维方式要好,不是吗; 最后,Lisp是一门可编程的编程语言,可以很容易扩展自身并且创造一门新的语言。我无法不动心于如此一门强大的语言。 ...

August 30, 2011 · 11 min · Tony Bai

Common Lisp初学点滴

Common Lisp是一门Interactive语言,比较容易上手。无论你是用CLISP,SBCL还是Clozure CL,你都可以很快地写出一个"Hello, World“程序出来。不过千万不要因此低估了Common Lisp,前人的经验表明:Common Lisp是门庞大且复杂的语言,其学习曲线可并不低。要想真正掌握它,需要你有持续的热情、足够的耐心和不断的练习。我接触Common Lisp时间也不长,是个地地道道的初级选手。这段时间看了些书,做了一些练习,这里把我初学Common Lisp过程中的点点滴滴记录下来,以备忘。 ...

August 5, 2011 · 6 min · Tony Bai

Hello,Common Lisp

Paul Graham不愧被誉为Lisp的超级推手,他的煽动力真的是很强悍。这不才刚刚看完一遍他编写的《黑客与画家》后,我就决定将Common Lisp作为今年计划学习的那门新语言,而且从现在就开始。 去年曾囫囵吞枣般的学习过Haskell,一门通用且庞大的纯函数式编程语言。在惊叹于Haskell如此与众不同且功能强大的同时,也为Haskell Monad那魔鬼般的蹩脚语法所苦恼,而Monad的引入就是为了隔离副作用,并让你可以利用些过程式命令式语言解决问题的范式。 ...

June 21, 2011 · 4 min · Tony Bai