你有没有想过,仅仅使用函数(过程),我们就能实现数组、对象,甚至是数字?

78 天前
 MHPSY

事情的起因是这样的,我在看 sicp 这本书,书中用函数(过程)实现了一种叫做 cons(序对)的结构,甚至用函数去实现了数字(一种叫做 church 计数的方式)。

于是我就在想能不能用函数去实现数组、对象。接下来我用 js 实现了数组和对象,顺便彻底理解了不可变数据结构是怎么一回事,大概相当于每次用都劫持掉“一部分函数”返回一个新的函数。

我制作了一个视频讲述了这个过程。

2972 次点击
所在节点    程序员
10 条回复
NoOneNoBody
78 天前
这段文字,真的是不看视频不知道讲什么
PS:还没看视频
littephi
78 天前
lambda 演算?它是图灵完备的。
Elaina
78 天前
lambda 演算是这样的😇😇😇,和图灵机模型是等价的
bnrwnjyw
78 天前
sicp 是经典
Donaldo
78 天前
肯定是可以的,不过优势在哪里?每次进行函数调用的开销也不小吧。
MHPSY
78 天前
@NoOneNoBody 楼下有几位朋友说出来了 其实核心就是 lambda 演算
MHPSY
78 天前
@Donaldo

不需要告诉计算机怎么样去计算,只需要表示出来计算是怎样进行的。

实际应用中我目前能想到的优势就两个:
1. 不可变数据(相当于每次返回一个新的”函数“)
2. 高阶函数(用函数去构建函数)
nagisaushio
78 天前
@Donaldo 函数只是一种抽象方式,可以被编译器优化成高效的指令。haskell 编译后并不全是函数调用
Mistwave
77 天前
想了解“不可变数据结构”推荐读读 https://www.cs.cmu.edu/~rwh/students/okasaki.pdf
szqcuckoo
77 天前
第一反应就是 λ演算,几年前在 b 站刷到过一个视频,就是用 js 来模拟,记得 up 名字叫做方一航好像

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1077638

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX