>>12609> Если n = 0, то n! = 1; иначе n! = n * (n - 1)!
Собственно, я это учёл в своей пасте. Там где говорил, про декларативную формулировку "кратчайшего пути". Но это всё равно не способ найти результат, мы просто объявляем, что для некой идейной абстракции - факториала - действительна такая закономерность. А так так такая закономерность действует только для одной идейной абстракции, то это и есть его определение. С этим определением очень удобно работать на уровнях выше, чем находится сам факториал, ну, т.е., нам не обязательно выполнять кучу действий, чтоб доказать, что n! * (n+1)! = n!^2 * (n+1)!. Но когда нам скажут, "всё, довольно пиздеть, скажи теперь чему равно 24!", нам придётся разложить это в 24 числа и перемножить (возможно, применив к этому предварительно ещё какие-нибудь преобразования, которые облегчат работу), на что уйдёт некоторое время. И тут как раз мы утыкаемся в то, что перемножать/складывать/[делать что-нибудь ещё] можно по-разному, с разным числом действий. И
каждое действие, которое мы выполним, потребует ненулевого времени. И, наконец, нам нужно будет
выполнять эти действия, т.е., мы опять получаем императивный набор инструкций. И, с практической точки зрения, это не страшно, если тот, кто будет выполнять инструкции, догадается выбрать лучший алгоритм для нахождения результата. Вот только это весьма сомнительно. Другой человек может догадаться, что к-тое число фибоначчи можно найти за почти логарифмическое число шагов, а то и вовсе "по формуле". Компилятор - нет, если ему не об этом не рассказали и он не разумен. Получается,
как я уже сказал, что нам либо нужно рассказать компилятору о всех возможных алгоритмах и способах их применения, либо постоянно спускаться к императивному изложению. Первое не рассматриваем. Второе предполагает два варианта - либо писать императивно почти всегда (тогда непонятно, нахуй нам вообще сдался Хаскель и максимально разумным выглядит изобретение какого-нибудь компилируемого пейтона), либо прибегать к нему только при необходимости, когда эффективность критична. Получается, что нужно знать, что стоит за нашими декларативными формулировками, а это не очень-то хорошо. Опять же, с теоретической точки зрения. С практической - в этом нет ничего страшного, если компилятор умеет решать большую часть трудностей, рождая эффективный код для "обычных" декларативных формулировок. Но это предположение опроверг пример с сортировкой Хоара ИТТ.
>>12604 Но программировние, как ни крути, не является фундаментальной наукой. Оно нужно, чтоб
делать дела. Замечательно, если эти дела можно свалить на фундаментальную науку (математику), и пользоваться ею. Но, как мне кажется - и я подкрепил это какими-никакими аргументами в предыдущем посте - хачкель пока что не даёт такой возможности, и, что куда хуже, вряд ли сможет её дать в хоть сколько-то обозримом будущем, даже при очень оптимистичных взглядах.
Возможно, я стану относиться к этому легче, когда поближе познакомлюсь с хачкелем. Пока что попридержу язык пока что.
Алсо, да, раз уж поговорили о факториалах, накидайте пожалуйста чисел фибоначчи на хаскелле. А то те, что я видел - фиговые какие-то, хуже чем на пайтоне. Надеюсь, я просто не встречал решений тех, кто умеет пользоваться возможностями хаскелля.