Кстати, о школьных учебниках. Недавно читал хороший, хоть и грустный пост, Виктора Васильева, занимавшегося до недавнего времени рецензированием учебников математики — atlmrf.livejournal.com Очень напоминает историю с учебниками и Фейнманом.

И вот хочется вставить свои пять копеек. С математикой ещё ладно, там хотя бы какие-то устоявшиеся правила есть. Но вот как рецензируют учебники информатики — большой вопрос.

Возьмём к примеру учебник Угриновича, который входит в список рекомендованных.

Продолжение в комментариях.

Когда-то давно мне было интересно узнать, откуда взялись ноты? Почему приятны звуки именно такой высоты, а не другой?

Первым же делом, два постулата.
Во-первых, две ноты, отличающихся по частоте в два раза — одна и та же нота.
Этому можно найти много объяснений, но оставлю в форме постулата.
Во-вторых, две ноты, отличающиеся по частоте в полтора раза, приятны как созвучие.
Такой интервал, кстати, называется квинта.

Так вот, начнем с какой-либо ноты. Возьмем струну длиной один метр и подвесим груз 1 кг.
Каждый раз будем увеличивать частоту в полтора раза, увеличивая груз в полтора раза.
Но если вес груза будет превышать 2кг, поделим его пополам.

Prelude> let cut x = if x>=2 then x/2 else x
Prelude> let f x = cut (1.5*x)

Проделаем такую операцию над первой нотой 12 раз и получим каких-то 13 звуков:

Prelude> let notes = take 13 $ iterate f 1
Prelude> notes
[1.0, 1.5, 1.125, 1.6875, 1.265625, 1.8984375, 1.423828125, 1.06787109375, 1.601806640625, 1.20135498046875, 1.802032470703125, 1.3515243530273438, 1.0136432647705078]

Все частоты ощутимо отличаются друг от друга, кроме первой и тринадцатой (1 и 1.0136).
Если продолжать увеличивать частоту в полтора раза и делить на два при необходимости,
то ноты будут повторяться с достаточно большой точностью.

Теперь если принять первую ноту с грузом 1 за до, то вот это и есть двенадцать нот(до, до#, ре, ре#, ...) в порядке возростания частоты:

Prelude Data.List> sort $ take 12 notes
[1.0, 1.06787109375, 1.125, 1.20135498046875, 1.265625, 1.3515243530273438, 1.423828125, 1.5, 1.601806640625, 1.6875, 1.802032470703125, 1.8984375]

Кстати, если взять первые 7 нот последовательности notes, то получится тональность соль мажор:

Prelude Data.List> let names = ["do", "do#", "re", "re#", "mi", "fa", "fa#", "sol", "sol#", "la", "la#", "si"]
Prelude Data.List> filter ((flip elem (take 7 notes)).fst) (zip (sort $ take 12 notes) names)
[(1.0,"do"), (1.125,"re"), (1.265625,"mi"), (1.423828125,"fa#"), (1.5,"sol"), (1.6875,"la"), (1.8984375,"si")]

"the third issue of lisp macro, is that it is meta programing. As such, it's analogous to 1st order logic and higher order logic. If you have to use meta-programing to solve a problem, it indicates perhaps your language isn't expressive enough in the first place, or you are going round-about."

всё-таки странный товарищ этот Xah Lee
xahlee.info