看了一下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