Здравствуйте, FR, Вы писали:
FR>У меня такой вопрос какие задачи ложатся на ФЯ лучше чем на ИЯ. Просто из своего опыта и из тех веток где была задача с простыми числами, у меня сложилось впечатление что даже многие математические задачи проще решаются ИЯ, например у той же задачи про решето Эратосфена сишная реализация намного прозрачнее и ближе к описанию алгоритма на естественном языке.
Хорошо, давайте сравним.
Быстрая сортировка на ФЯ:
qsort [] = []
qsort (x:xs) = qsort elts_lt_x ++ [x] ++ qsort elts_greq_x
where
elts_lt_x = [y | y <- xs, y < x]
elts_greq_x = [y | y <- xs, y >= x]
Решето эрастофена на ФЯ:
ld n = ldf 2 n
divides d n = rem n d == 0
ldf k n | divides k n = k
| k^2 > n = n
| otherwise = ldf (k+1) n
prime n | n < 1 = error "not a positive integer"
| n == 1 = False
| otherwise = ld n == n
Императивные аналоги, я думаю, Вы себе представляете.
На функциональных языках многое записывается проще. Проблема же состоит только в том, что современные компиляторы функциональных языков не могут сгененрировать эффективный код. Но это не принципиальная проблема. Рано или позно появятся эффективные компиляторы. Еще одна проблема функциональных языков — это убогая семантика массивов. Но и она, скорее всего, тоже окажется в прошлом.
Идея любого языка программирования заключается в том, что бы переложить максимальное количество рутинной работы на компьютер. А для этого задача должна описываться на максимально возможном для машины уровне абстракции. Пока что для этого ничего лучше функционального и логического подхода не придумано.