C++ 对比 Scheme(Lisp)
发布日期: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解释器也是可以的。

上一篇:MIT CS课程
下一篇:一些CS相关的公开课资料

发表评论

最新留言

关注你微信了!
[***.104.42.241]2025年03月28日 04时48分29秒