当前位置: 首页 > news >正文

Lisp的特性 (评论发不出,只好写一篇新的)

本来是给 Lisp的给力特性 这篇文章的评论,奈何csdn的blog上无法提交,只好新发一篇:

目前我不知道到底与C++的宏(其实也是一样的编译期展开),还有比普通函数的优势在哪。(原谅我才学Lisp没有几天)

====

Lisp 的Macro 与 C++中 Macro 的区别: (原谅我N多年没用过C++) Lisp的语言本身就是 S表达式, Lisp 的Macro直接操作列表,可以应用全部的Lisp语法工具来将输入列表转换成目标的程序列表。
相比较来说 C++的Macro更多只是替换。表达能力上不可同日而语。

Lisp的Macro 可以实现惰性计算,可以实现自己的语法结构, 传递给Macro的参数可以自己控制其求值次数(0次或多次) ,这样就可以自己实现 if , loop 等语法结构。

====

Lisp 与 Haskell 并非同源, Haskell 来自 Miranda , 借鉴了 ML 中的类型推导。 Python的 list comperhension 是来自 haskell, 在 CL中有一个类似的 incf-cl 库可以实现 list comperhension 。 这就是Lisp的强大之处, 它根本就没语法,写出来的就是代码树, Macro就是一个代码生成器。 所以有什么新的语言特性,Lisp都能快速的吸收进来。

Common Lisp 中通过incf-cl 库实现的 list comprehension:

CL-USER(15): (lc (* x x) (<- x (take 10 (range 0 1/3 5)))) (0 1/9 4/9 1 16/9 25/9 4 49/9 64/9 9)


实际上, 后来很重要的 循环、OO、异常处理, 在Lisp中都是通过 macro 实现的。

因此,神马都是浮云, 不服Lisp的,可以自己写个 C++, Java 的预处理扩展, 自己实现各种特性, 只是Lisp将这种能力内置了,缩短了进化语言与普通开发之间的距离。人人都能变成语言的改进者。

相关文章:

  • 数据图表插件Echarts(一)
  • 一只布谷鸟,两只火鸡,三匹赛马,移动竞赛的改变
  • 2016年 前端学习网站
  • --自定义事件
  • C++ VS C#(10):构造函数与析构函数
  • oracle 10g OEM常规错误解决
  • Hibernate实体关系映射(OneToMany单边)——完整实例
  • JavaScript学习笔记(三)——this、原型、javascript面向对象
  • 在Common Lisp中使用 List Comprehension
  • 基础数据结构
  • C++ VS C#(11):结构体和对象的细微区别
  • 数据库被黑后留下的数据
  • 通过html字符串连接组合并调用javascript函数
  • ARM+LINUX移植攻略(十)支持东华 3.5寸LCD输出console信息和BMP图片、logo
  • 字符串截取函数slice, substring, substr
  • [译]前端离线指南(上)
  • 4. 路由到控制器 - Laravel从零开始教程
  • bootstrap创建登录注册页面
  • canvas绘制圆角头像
  • Create React App 使用
  • maven工程打包jar以及java jar命令的classpath使用
  • MySQL数据库运维之数据恢复
  • Node + FFmpeg 实现Canvas动画导出视频
  • nodejs:开发并发布一个nodejs包
  • PermissionScope Swift4 兼容问题
  • php的插入排序,通过双层for循环
  • Python进阶细节
  • springboot_database项目介绍
  • vue总结
  • 安卓应用性能调试和优化经验分享
  • 仿天猫超市收藏抛物线动画工具库
  • 工程优化暨babel升级小记
  • 技术攻略】php设计模式(一):简介及创建型模式
  • 力扣(LeetCode)357
  • 如何邀请好友注册您的网站(模拟百度网盘)
  • 如何优雅的使用vue+Dcloud(Hbuild)开发混合app
  • 入口文件开始,分析Vue源码实现
  • 深入浅出webpack学习(1)--核心概念
  • 责任链模式的两种实现
  • 测评:对于写作的人来说,Markdown是你最好的朋友 ...
  • ​力扣解法汇总1802. 有界数组中指定下标处的最大值
  • #设计模式#4.6 Flyweight(享元) 对象结构型模式
  • $分析了六十多年间100万字的政府工作报告,我看到了这样的变迁
  • (八)五种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (超简单)构建高可用网络应用:使用Nginx进行负载均衡与健康检查
  • (动态规划)5. 最长回文子串 java解决
  • (三)Honghu Cloud云架构一定时调度平台
  • (十八)用JAVA编写MP3解码器——迷你播放器
  • (一)【Jmeter】JDK及Jmeter的安装部署及简单配置
  • (转)Linq学习笔记
  • (转)关于如何学好游戏3D引擎编程的一些经验
  • . NET自动找可写目录
  • .equals()到底是什么意思?
  • .NET 4.0中使用内存映射文件实现进程通讯
  • .NET Core跨平台微服务学习资源