函数式入门圣经

您所在的位置:网站首页 little译中文 函数式入门圣经

函数式入门圣经

2023-11-01 04:36| 来源: 网络整理| 查看: 265

函数式入门圣经——王垠力荐《The Little Schemer》

除了在知乎看到过一两次,首次正式得知《The Little Schemer》此书则是来自王垠的博客:

Dan Friedman 是 Indiana 大学的教授,程序语言领域的创始人之一。他主要的著作《The Little Schemer》(前身叫《The Little Lisper》) 是程序语言界最具影响力的书籍之一。现在很多程序语言界的元老级人物,当年都是看这本 “小人书” 学会了 Lisp/Scheme,才决心进入这一领域。

怼天怼地的王垠,在 GTF - Great Teacher Friedman 不遗余墨的表达了对 Dan Friedman 敬重与感激,文中满是对这位好老师的感激之情与知遇之恩。

恰逢我又在重新看 SICP,对,就是那本看起来不厚,习题多得要命的那本 Structure and Interpretation of Computer Programs(计算机程序的构造和解释)。当然这本书的赞誉满如繁星:https://www.zhihu.com/question/26549715/answer/34336593185

过多的习题实在没有耐心,难以坚持,于是就先试试看《The Little Schemer》。

我在寒假中已把《The Little Schemer》看完,收获良多,如今重温一下,顺便写本书评。

相对于 SICP ,我更推荐各位先看《The Little Schemer》打打基础,当这是一个 tutorial,其一问一答式的写作方法会令你耳目一新的-------讲的更加循循善诱,鞭辟入里,而且没什么习题 - -。你可以很快就了解到怎么样写 scheme,递归的威力,以及了解怎么样写一个 scheme 解释器,顺带了解了 丘奇计数,y 组合子等。

我顺带在这里整理下这本书讨论了啥:

玩具总动员

引入scheme 中基本元素atom(原子), list(列表), car(取列表的第一项),cdr(取列表除第一项的余下作为列表),cons(把 a 元素加到 b 列表中),null?(判断是否为空) , eq?(是否相等)。

以上就是全部了,之后的所有东西就靠以上关键字实现,包括 sheme 解释器,y 组合子,删除列表第 x 项元素。

处理,处理,反复处理。。。

引入函数lambda以及or 关键词(if lese 作用),引入递归概念,实现函数lat?(判断列表里是否全为atom 原子),member?(列表是否包含xx)等为例子。

用 cons 构筑恢宏

通过实现 rember(删除列表某元素)引入 cons 构建/拼接列表,实现 first(取列表第一项),实现 insertR(在列表的某项后插入一个元素),multiinsertR(在列表的某项后插入一个列表内所有元素——听到这个用递归做是否就有点不习惯了呢)。

此章主要通过实现更多的函数,让读者更加熟悉递归实现函数的思维,以及如何写递归终止条件。

数字游戏

实现数字中的 +, -,*,/等方法,就是自己来做数字的这些功能,可能这样说对没有接触过丘奇计数的人有点奇怪,我举一个我在阿里校招中出过的一道面试题为例子:

以下C 语言程序的输出是什么?

#include int lambda(a, b) { if(a == 0) { return b; }else { a = a - 1; b = b + 1; return lambda(a, b); } } int mull_r(a, b) { if(a == 0) { return 0; }else { a = a - 1; return lambda(b, mull_r(a, b)) ; } } int main() { int a = 88888; int b = 11111; printf("%d\n", lambda(a, b)); int c = 300; int d = 400; printf("%d\n", mull_r(c, d)); return 0; }

A. 77777 120400

B. 99999 120000

C. 99998 120100

D. 99999 119600

函数式入门圣经——王垠力荐《The Little Schemer》

除了在知乎看到过一两次,首次正式得知《The Little Schemer》此书则是来自王垠的博客:

Dan Friedman 是 Indiana 大学的教授,程序语言领域的创始人之一。他主要的著作《The Little Schemer》(前身叫《The Little Lisper》) 是程序语言界最具影响力的书籍之一。现在很多程序语言界的元老级人物,当年都是看这本 “小人书” 学会了 Lisp/Scheme,才决心进入这一领域。

怼天怼地的王垠,在 GTF - Great Teacher Friedman 不遗余墨的表达了对 Dan Friedman 敬重与感激,文中满是对这位好老师的感激之情与知遇之恩。

恰逢我又在重新看 SICP,对,就是那本看起来不厚,习题多得要命的那本 Structure and Interpretation of Computer Programs(计算机程序的构造和解释)。当然这本书的赞誉满如繁星:https://www.zhihu.com/question/26549715/answer/34336593185

过多的习题实在没有耐心,难以坚持,于是就先试试看《The Little Schemer》。

我在寒假中已把《The Little Schemer》看完,收获良多,如今重温一下,顺便写本书评。

相对于 SICP ,我更推荐各位先看《The Little Schemer》打打基础,当这是一个 tutorial,其一问一答式的写作方法会令你耳目一新的-------讲的更加循循善诱,鞭辟入里,而且没什么习题 - -。你可以很快就了解到怎么样写 scheme,递归的威力,以及了解怎么样写一个 scheme 解释器,顺带了解了 丘奇计数,y 组合子等。

我顺带在这里整理下这本书讨论了啥:

玩具总动员

引入scheme 中基本元素atom(原子), list(列表), car(取列表的第一项),cdr(取列表除第一项的余下作为列表),cons(把 a 元素加到 b 列表中),null?(判断是否为空) , eq?(是否相等)。

以上就是全部了,之后的所有东西就靠以上关键字实现,包括 sheme 解释器,y 组合子,删除列表第 x 项元素。

处理,处理,反复处理。。。

引入函数lambda以及or 关键词(if lese 作用),引入递归概念,实现函数lat?(判断列表里是否全为atom 原子),member?(列表是否包含xx)等为例子。

用 cons 构筑恢宏

通过实现 rember(删除列表某元素)引入 cons 构建/拼接列表,实现 first(取列表第一项),实现 insertR(在列表的某项后插入一个元素),multiinsertR(在列表的某项后插入一个列表内所有元素——听到这个用递归做是否就有点不习惯了呢)。

此章主要通过实现更多的函数,让读者更加熟悉递归实现函数的思维,以及如何写递归终止条件。

数字游戏

实现数字中的 +, -,*,/等方法,就是自己来做数字的这些功能,可能这样说对没有接触过丘奇计数的人有点奇怪,我举一个我在阿里校招中出过的一道面试题为例子:

以下C 语言程序的输出是什么?

#include int lambda(a, b) { if(a == 0) { return b; }else { a = a - 1; b = b + 1; return lambda(a, b); } } int mull_r(a, b) { if(a == 0) { return 0; }else { a = a - 1; return lambda(b, mull_r(a, b)) ; } } int main() { int a = 88888; int b = 11111; printf("%d\n", lambda(a, b)); int c = 300; int d = 400; printf("%d\n", mull_r(c, d)); return 0; }

A. 77777 120400

B. 99999 120000

C. 99998 120100

D. 99999 119600

函数式入门圣经——王垠力荐《The Little Schemer》

除了在知乎看到过一两次,首次正式得知《The Little Schemer》此书则是来自王垠的博客:

Dan Friedman 是 Indiana 大学的教授,程序语言领域的创始人之一。他主要的著作《The Little Schemer》(前身叫《The Little Lisper》) 是程序语言界最具影响力的书籍之一。现在很多程序语言界的元老级人物,当年都是看这本 “小人书” 学会了 Lisp/Scheme,才决心进入这一领域。

怼天怼地的王垠,在 GTF - Great Teacher Friedman 不遗余墨的表达了对 Dan Friedman 敬重与感激,文中满是对这位好老师的感激之情与知遇之恩。

恰逢我又在重新看 SICP,对,就是那本看起来不厚,习题多得要命的那本 Structure and Interpretation of Computer Programs(计算机程序的构造和解释)。当然这本书的赞誉满如繁星:https://www.zhihu.com/question/26549715/answer/34336593185

过多的习题实在没有耐心,难以坚持,于是就先试试看《The Little Schemer》。

我在寒假中已把《The Little Schemer》看完,收获良多,如今重温一下,顺便写本书评。

相对于 SICP ,我更推荐各位先看《The Little Schemer》打打基础,当这是一个 tutorial,其一问一答式的写作方法会令你耳目一新的-------讲的更加循循善诱,鞭辟入里,而且没什么习题 - -。你可以很快就了解到怎么样写 scheme,递归的威力,以及了解怎么样写一个 scheme 解释器,顺带了解了 丘奇计数,y 组合子等。

我顺带在这里整理下这本书讨论了啥:

玩具总动员

引入scheme 中基本元素atom(原子), list(列表), car(取列表的第一项),cdr(取列表除第一项的余下作为列表),cons(把 a 元素加到 b 列表中),null?(判断是否为空) , eq?(是否相等)。

以上就是全部了,之后的所有东西就靠以上关键字实现,包括 sheme 解释器,y 组合子,删除列表第 x 项元素。

处理,处理,反复处理。。。

引入函数lambda以及or 关键词(if lese 作用),引入递归概念,实现函数lat?(判断列表里是否全为atom 原子),member?(列表是否包含xx)等为例子。

用 cons 构筑恢宏

通过实现 rember(删除列表某元素)引入 cons 构建/拼接列表,实现 first(取列表第一项),实现 insertR(在列表的某项后插入一个元素),multiinsertR(在列表的某项后插入一个列表内所有元素——听到这个用递归做是否就有点不习惯了呢)。

此章主要通过实现更多的函数,让读者更加熟悉递归实现函数的思维,以及如何写递归终止条件。

数字游戏

实现数字中的 +, -,*,/等方法,就是自己来做数字的这些功能,可能这样说对没有接触过丘奇计数的人有点奇怪,我举一个我在阿里校招中出过的一道面试题为例子:

以下C 语言程序的输出是什么?

#include int lambda(a, b) { if(a == 0) { return b; }else { a = a - 1; b = b + 1; return lambda(a, b); } } int mull_r(a, b) { if(a == 0) { return 0; }else { a = a - 1; return lambda(b, mull_r(a, b)) ; } } int main() { int a = 88888; int b = 11111; printf("%d\n", lambda(a, b)); int c = 300; int d = 400; printf("%d\n", mull_r(c, d)); return 0; }

A. 77777 120400

B. 99999 120000

C. 99998 120100

D. 99999 119600



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3