
C++ 对比 Scheme(Lisp)
好像看起来差不多,但是C++的语法上还是体现了太多的语言细节,而Scheme看起来更加“抽象”。你只需要关注解决问题方法,而不是去在意一大堆语法上的细节。
发布日期:2021-05-07 23:35:31
浏览次数:17
分类:原创文章
本文共 1033 字,大约阅读时间需要 3 分钟。
看了一下SICP的第一课 MIT 6.001 86年版的,用Scheme来解决实际问题确实是一种非常具有“美学”的语言。
C++11 也开始支持lambda表达式了,可以在对象或者函数里定义函数。类“Function-Orient Programming”
于是自己把第一课的例子用Scheme和C++11写了一下。
先是Lisp
(define (average x y)(/ (+ x y) 2))(define (square x)(* x x))(define (sqrt x) (define (improve guess) (average guess(/ x guess))) (define (good-enough? guess) ( < (abs (- (square guess) x) ) .001)) (define (try guess) (if (good-enough? guess) guess (try (improve guess)))) (try 1))
然后是C++11
double minsqrt(double x){ auto improve = [=](double guess){ return average(guess, x / guess); }; auto good_enough = [=](double guess){ return abs(guess * guess - x) < 0.001; }; std::function<double(double)> mytry = [=, &mytry](double guess){ if (good_enough(guess)) return guess; else return mytry(improve(guess)); }; return mytry(1);}
好像看起来差不多,但是C++的语法上还是体现了太多的语言细节,而Scheme看起来更加“抽象”。你只需要关注解决问题方法,而不是去在意一大堆语法上的细节。
比如 std::function<double(double)> 这个相当不灵活也不美观。在c++11 的编译器上Auto关键字还没办法支持定义“递归式”的lambda表达式。我觉得这个很有必要支持一下!
不过C++ 毕竟是强大的生产工具,用C++自己“实现”一个LISP解释器也是可以的。
发表评论
最新留言
关注你微信了!
[***.104.42.241]2025年03月28日 04时48分29秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
【Oozie】(三)Oozie 使用实战教学,带你快速上手!
2019-03-05
师兄面试遇到这条 SQL 数据分析题,差点含泪而归!
2019-03-05
C语言的数值溢出问题(上)
2019-03-05
8051单片机(STC89C52)以定时器中断模式实现两倒计时器异步计时
2019-03-05
vue项目通过vue.config.js配置文件进行proxy反向代理跨域
2019-03-05
android:使用audiotrack 类播放wav文件
2019-03-05
聊聊我的五一小假期
2019-03-05
数据库三个级别封锁协议
2019-03-05
ACM/NCPC2016 C Card Hand Sorting(upc 3028)
2019-03-05
ubuntu学习笔记-常用文件、命令以及作用(hosts、vim、ssh)
2019-03-05
SLAM学习笔记-求解视觉SLAM问题
2019-03-05
普歌-允异团队-HashMap面试题
2019-03-05
还在一个一个手动安装虚拟机吗?Cobbler自动部署装机一键最小化安装打把游戏就好了
2019-03-05
程序员应该知道的97件事
2019-03-05
create-react-app路由的实现原理
2019-03-05
Linux环境变量配置错误导致命令不能使用(杂谈)
2019-03-05
openstack安装(九)网络服务的安装--控制节点
2019-03-05
shell编程(六)语言编码规范之(变量)
2019-03-05
vimscript学习笔记(二)预备知识
2019-03-05