这篇文章看起来充满矛盾。作者一边在推进AI代理实验,一边翻出上世纪90年代的Haskell学术论文。这种反差背后有一个直接理由:AI会成倍放大代码库中已有的模式,而当前行业恰恰缺少描述可扩展模式的准确术语。
被混淆的两个维度
![]()
行业里长期流行一种说法,认为函数式就等于声明式,代码要么是有副作用、命令式的,要么是纯函数、声明式的。但作者指出,函数式和声明式其实是两个独立维度。既可以写出既函数式又命令式的代码,也可以写出既有副作用又声明式的代码。
1993年的论文并非自相矛盾
Simon L Peyton Jones 和 Philip Wadler 参与创造了 Haskell,两人在1993年发表论文《Imperative Functional Programming》。这个标题听起来像自相矛盾,但实际不是。函数式编程社区当时一直在为如何管理输入输出等副作用而头疼,两位Haskell创造者提出把输入输出命令的表达与执行解耦。
他们在论文中注意到,用单子风格写出来的程序看起来很像命令式程序。论文用C语言和Haskell的echo程序做了对比,表面结构非常接近。但他们并不认为这是问题,还列出两个保留下来的优势:即使识别出单子风格中的命令式结构,也不必放弃纯函数式编程固有的优点。
Haskell有命令式特性吗?
另一位Haskell创造者 John Launchbury 在1994年发表论文《Lazy Imperative Programming》。文中明确提到,为了表达输入输出,Glasgow Haskell 引入了命令式特性。论文里出现的 writeVar 就是一个命令式语句。也就是说,Haskell 具备命令式特性,使用这些特性的代码也是命令式的。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.