IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

标签:Scheme

共 2 篇相关文章

IT 累计浏览 2,783

Scheme 初步

这篇讲的是作者出于函数式编程启蒙、接触经典教材《计算机程序的构造和解释》以及扩展 Emacs 等现实考虑,开启 Scheme 语言学习之旅的初体验。 文章没有高深理论,而是以轻松引导的方式,带读者跨过环境配置这道常见的“入门第一坎”。从在线 REPL 到本地安装,作者分享了让程序“跑起来”的最短路径。核心语法部分从最基础的 `( + 1 1 )` 聊起,清晰拆解了括号、前缀表示法和函数调用这些 Lisp 家族的标志性特征,帮助读者建立最初的语感。 作者坦言中文资料稀缺,因此参考了日文教程并对比了不同译本质量,文章本身也是学习过程的整理备忘。整体而言,这篇记录亲切、务实,为那些对函数式编程好奇又不知从何入手的开发者,提供了一个低门槛的起点和一份真诚的学习地图。

IT 累计浏览 3,102

编程珠玑番外篇 -J. 高级语言是怎么来的-6

这篇讲的是Scheme语言如何从LISP中诞生,并成为现代函数式编程重要里程碑。文章从“函数作为一级对象”这个概念切入,说明在LISP中函数可以像整数一样被传递和返回,这引出了高阶函数如apply、map和reduce的基础。 然而,当函数携带“自由变量”(即非参数也非内部变量)被传来传去时,问题就来了。作者用一个具体例子演示:在早期LISP中,定义一个返回“加n”函数的addn,当测试add1时,本应得到5却得到了8。这是因为解析器采用了动态作用域,在自由变量s被使用时才去当前栈中查找其值,导致变量绑定错误。 这个问题的根源在于函数丢失了其定义时的环境信息。文章追溯到LISP实现者Steve Russell的解决方案:他引入了FUNCTION修饰符,让lambda表达式在解析时就静态绑定到当时的环境——这就是“闭包”的雏形。这种静态作用域(文法作用域)确保了自由变量不会在函数传递过程中“幽灵般”乱跑,也解决了著名的FUNARG问题。 文章最后指出,Scheme正是基于这些对作用域和闭包的规范化,才为LISP家族注入了新的活力,影响了后续包括Common LISP在内的语言发展,甚至间接成就了Paul Graham等人的商业传奇。