C++ 对比 Scheme(Lisp)

来源:互联网 发布:java程序员的浪漫代码 编辑:程序博客网 时间:2024/05/17 02:08

看了一下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;elsereturn mytry(improve(guess));};return mytry(1);}

好像看起来差不多,但是C++的语法上还是体现了太多的语言细节,而Scheme看起来更加“抽象”。你只需要关注解决问题方法,而不是去在意一大堆语法上的细节。

比如 std::function<double(double)> 这个相当不灵活也不美观。在c++11 的编译器上Auto关键字还没办法支持定义“递归式”的lambda表达式。我觉得这个很有必要支持一下!

不过C++ 毕竟是强大的生产工具,用C++自己“实现”一个LISP解释器也是可以的。

0 0
原创粉丝点击