V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
MHPSY
V2EX  ›  程序员

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

  •  1
     
  •   MHPSY · 78 天前 · 2972 次点击
    这是一个创建于 78 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    10 条回复    2024-10-05 20:23:48 +08:00
    NoOneNoBody
        1
    NoOneNoBody  
       78 天前
    这段文字,真的是不看视频不知道讲什么
    PS:还没看视频
    littephi
        2
    littephi  
       78 天前   ❤️ 2
    lambda 演算?它是图灵完备的。
    Elaina
        3
    Elaina  
       78 天前   ❤️ 1
    lambda 演算是这样的😇😇😇,和图灵机模型是等价的
    bnrwnjyw
        4
    bnrwnjyw  
       78 天前   ❤️ 1
    sicp 是经典
    Donaldo
        5
    Donaldo  
       78 天前   ❤️ 1
    肯定是可以的,不过优势在哪里?每次进行函数调用的开销也不小吧。
    MHPSY
        6
    MHPSY  
    OP
       78 天前
    @NoOneNoBody 楼下有几位朋友说出来了 其实核心就是 lambda 演算
    MHPSY
        7
    MHPSY  
    OP
       78 天前
    @Donaldo

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

    实际应用中我目前能想到的优势就两个:
    1. 不可变数据(相当于每次返回一个新的”函数“)
    2. 高阶函数(用函数去构建函数)
    nagisaushio
        8
    nagisaushio  
       78 天前 via Android
    @Donaldo 函数只是一种抽象方式,可以被编译器优化成高效的指令。haskell 编译后并不全是函数调用
    Mistwave
        9
    Mistwave  
       77 天前 via iPhone
    想了解“不可变数据结构”推荐读读 https://www.cs.cmu.edu/~rwh/students/okasaki.pdf
    szqcuckoo
        10
    szqcuckoo  
       77 天前
    第一反应就是 λ演算,几年前在 b 站刷到过一个视频,就是用 js 来模拟,记得 up 名字叫做方一航好像
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2478 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 02:45 · PVG 10:45 · LAX 18:45 · JFK 21:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.