Собрался убивать двух зайцев одним махом.
1. Изучить функциональное программирование по книжке SICP. (Кто не знает, это фундаментальный курс программирования в MIT
Structure and Interpretation of Computer Programs)
2. Изучить какой-нибудь динамический мультипарадигменный язычок для web. Колебался между ruby (ибо rails) и python (ибо django)
Итак буду читать sicp, а упражнение оттуда делать на ruby. (в sicp используется scheme)
Вобщем сначала ничего интересного, вводится префиксная запись, S-выражения и прочие особенности scheme, повторять которые на ruby никакого толку. А вот пункт 1.1.7 "Вычисление квадратного корня методом Ньютона" уже поинтереснее, причем мы ввели только арифметику, ветвление, сравнение и определение функции. Вот почти дословный перевод на ruby:
def average(x, y)
(x + y) / 2
end
def good_enough(guess, x)
((guess ** 2 - x).abs < 0.001)
end
def improve(guess, x)
average(guess, (x / guess))
end
def sqrt_iter(guess, x)
if good_enough(guess, x)
guess
else
sqrt_iter(improve(guess, x), x)
end
end
def sqrt(x)
sqrt_iter(1.0, x)
end
Итак рекурсия. А как еще сделаешь итерацию без циклов?
Нда, Ньютон, да не тот. Начальное приближение всегда 1.0 и проверка на завершение не блещет.
Ну да ладно не за то боремся, тем более авторы обещают потом исправиться. Посмотрим.
Что касаемо ruby, оказывается числовые константы это объекты с методами: -2.abs дает 2. А я пятнадцать минут функцию искал. Ну в общем даже прикольно. У чисел еще замечен такой забавный метод:
3.times do puts "обалдеть" end
обалдеть
обалдеть
обалдеть
так дело пойдет и никакие циклы не понадобятся.
Вобщем продолжение следует.
ЗЫ. Интересно а в ЖЖ есть подсветка синтаксиса? С разбега не нашел.