C++ 对比 Scheme(Lisp)

本文通过比较C++11的lambda表达式和Scheme语言,探讨两种语言在解决问题上的美学差异。作者指出,尽管C++11的lambda在某些方面不够灵活,但其强大的功能允许开发者自行实现LISP解释器,展示了C++作为生产工具的潜力。
摘要由CSDN通过智能技术生成

看了一下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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值