LINUX.ORG.RU

История изменений

Исправление monk, (текущая версия) :

Так всё равно ужасно. Чтобы было читабельно приходится именовать все промежуточные элементы:

рассчитать зарплату используя менеджер-расчёта за период с начала-рабочего-месяца по конец-рабочего-месяца для сотрудника,
где
   начало-рабочего-месяца = получить из формы форма-ввода дату начала 
   конец-рабочего-месяца = получить из формы форма-ввода дату окончания" 
   сотрудник = получить сотрудника с фамилией Иванов
   форма-ввода = получить форму ввода данных

От бейсика или кобола отличается только порядком операторов.

Причём если алгоритм более-менее математический, то возникает ещё и сложность с подбором имён.

Сравни Haskell:

main :: IO ()
main = mapM_ print $ queens 8
 
queens :: Int -> [[Int]]
queens n = foldM f [] [1..n]
    where
      f qs _ = [q:qs | q <- [1..n] \\ qs, q `notDiag` qs]
      q `notDiag` qs = and [abs (q - qi) /= i | (qi,i) <- qs `zip` [1..]]

И аналог на грамматически корректном:

вывести результат выражения "расстановка 8 королев" где
расстановка количества/р королев =
  свёртка функцией шаг из списка-последовательности в пустой-список
  где
    список-последовательность = список чисел от 1 до количества
    шаг из собранного-списка/р = построить список из списков с головой из обходимого-списка и хвостом собранным-списком, 
      где обходимый список = разность списка-последовательности и собранного-списка, в котором каждый элемент не диагонален собранному-списку
    элемент/и не диагонален списку/д = одновременно истинен результат выражения "список-условий из элемента и списка"
    список-условий из элемента и списка = построить список из результата выражения "элемент не на диагонали с проверяемый-элемент с номером номер-элемента" из списка-с-номерами из списка трактуемого как пара из проверяемого-элемента/р и номера-элемента/р
    список-с-номерами из списка/р = список пар из элементов списка и элементов списка-последовательности
    элемент/и не на диагонали с проверяемым-элементом/д с номером номер/и = модуль разности элемента и проверяемого элемента не равен номеру

Второе точно более читабельно?

Исходная версия monk, :

Так всё равно ужасно. Чтобы было читабельно приходится именовать все промежуточные элементы:

рассчитать зарплату используя менеджер-расчёта за период с начала-рабочего-месяца по конец-рабочего-месяца для сотрудника,
где
   начало-рабочего-месяца = получить из формы форма-ввода дату начала 
   конец-рабочего-месяца = получить из формы форма-ввода дату окончания" 
   сотрудник = получить сотрудника с фамилией Иванов
   форма-ввода = получить форму ввода данных

От бейсика или кобола отличается только порядком операторов.

Причём если алгоритм более-менее математический, то возникает ещё и сложность с подбором имён.

Сравни Haskell:

main :: IO ()
main = mapM_ print $ queens 8
 
queens :: Int -> [[Int]]
queens n = foldM f [] [1..n]
    where
      f qs _ = [q:qs | q <- [1..n] \\ qs, q `notDiag` qs]
      q `notDiag` qs = and [abs (q - qi) /= i | (qi,i) <- qs `zip` [1..]]

И аналог на грамматически корректном:

вывести результат выражения "расстановка 8 королев" где
расстановка количества/р королев =
  свёртка функцией шаг из списка-последовательности в пустой-список
  где
    список-последовательность = список чисел от 1 до количества
    шаг из собранного-списка/р = построить список из списков с головой из обходимого-списка и хвостом собранным-списком, 
      где обходимый список = разность списка-последовательности и собранным-списком, в котором каждый элемент не диагонален собранному-списку
    элемент/и не диагонален списку/д = одновременно истинен результат выражения "список-условий из элемента и списка"
    список-условий из элемента и списка = построить список из результата выражения "элемент не на диагонали с проверяемый-элемент с номером номер-элемента" из списка-с-номерами из списка трактуемого как пара из проверяемого-элемента/р и номера-элемента/р
    список-с-номерами из списка/р = список пар из элементов списка и элементов списка-последовательности
    элемент/и не на диагонали с проверяемым-элементом/д с номером номер/и = модуль разности элемента и проверяемого элемента не равен номеру

Второе точно более читабельно?