fact (N) = N * fact (N–1); fact (0) = 1
Очевидно, это рекурсивное определение более точно соответствует природе функции. На языке функционального программирования приведенное определение является программой. Любой алгоритм можно представить в виде рекурсивной функции, но представлять знания в виде рекурсии намного сложнее, чем в виде алгоритма.
На языке логического программирования «Пролог» программа вычисления факториала выглядит следующим образом:
fact (0, 1).
fact (N, F) если N1= N–1, fact (N1, N2), F=N*N2.
Этот язык менее естественен для записи функций, но значительно удобнее для представления знаний в виде: если …, то …. Эта форма стала основой технологии программирования так называемых экспертных систем. Программировать экспертные системы просто, но найти эксперта со знаниями и извлечь знания из него в этой форме невозможно.
Я подсел (иначе не скажешь) на «Пролог» и даже основную свою систему написал на «Турбопрологе» (выдающийся продукт компании «Борланд»), а после заката «Пролога» бросил программировать вообще. Оптимисты, которые никогда не бывают правы, но всегда выигрывают, предрекали, что «Пролог» будет играть роль «Фортрана» в 2000 году. Увы. Разумеется, «Пролог» имеет недостатки, например, cut (встроенный предикат «Пролога» для обрезания перебора), который убивает логическую сущность, но без которого невозможно писать эффективные программы. Думаю, что дело не столько в недостатках Пролога, сколько в неготовности человека. Несколько раз я читал лекции по программированию на «Прологе» – в лучшем случае только один студент из группы был в состоянии преодолеть алгоритмическое мышление.
Потом я перешел в категорию IТ-менеджеров. Работа менеджера, если ее можно назвать работой, мне не нравится, но кормит она намного лучше и, в качестве компенсации, оставляет голову свободной, потому что голова IТ-менеджеру, впрочем, как и любому менеджеру, не нужна.
Программирование свело меня с совершенно уникальным человеком – Николаем Михайловичем Ершовым. В Институте горного дела в Москве он разрабатывал какие-то алгоритмы, для реализации которых на ЭВМ ему нужен был программист, так как сам он не программировал. В один из его визитов в Караганду (примерно 1975 год), с которой его многое связывало, шеф попросил меня помочь ему.
Мы сработались мгновенно. Он давал очень ясные и подробные блок-схемы, а я переводил их в машинные коды. Я работал автоматически, как ассемблер, даже не понимая сути. Мы закончили работу за неделю, и он был поражен моей скоростью. На самом деле (и я, конечно, сказал ему об этом) у него не было ошибок в блок-схемах, а я почти не делал ошибок в программах.
Уникальность его заключалась в том, что он отсидел в общей сложности 25 лет. Первые 10 он получил в 1931-м, будучи студентом второго курса Ленинградского матмеха, за якобы троцкизм (что-то брякнул неосторожно). После отбывания срока (все десять) он попал на войну, где ему снова не повезло, и он получил еще 15 лет. Он отсидел все 15, большую часть в Карлаге, поэтому, выйдя на свободу, остался в Караганде. В возрасте 56 лет закончил Политехнический институт, а в 61 защитил кандидатскую диссертацию.
Возникшая взаимная симпатия не могла перерасти в дружбу, так как ему было около 70 лет, и я, будучи молодым дураком, воспринимал его глубоким стариком, хоть и с удивительно ясной головой. Всего два раза я останавливался у него в Москве.
Не помню, где он жил, но было это, как принято говорить, у черта на куличках – сначала добрались до какого-то вокзала, затем электричка, и, наконец, автобус. Весь вечер мы пили водку и разговаривали о программировании, литературе, музыке и др. После первой бутылки он сам шел в магазин за второй. На мою готовность сбегать он жестко указал мне на место, сказав, что я – гость. После двух бутылок водки голова у него слегка (все-таки 70 лет) дрожала, но держался он молодцом и в заключение вечера с чувством исполнил «Лунную сонату». Благодаря ему я со временем тоже стал играть на пианино, но в «поддатом» состоянии ничего не могу, так как алкоголь нарушает координацию движений.
Он дал совет: «Володя, никогда не гонись за деньгами. Смотри, я не гнался, и они пришли, и какие деньжища». Деньжища эти были всего-навсего 300 рублей в месяц (зарплата старшего научного сотрудника) и, как говорили раньше, «фунт прованского масла». В то время и я получал почти столько же. Тем не менее, я старался следовать этому совету всю жизнь, и деньги всегда (тьфу-тьфу) ко мне шли.