История изменений
Исправление 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 до количества
шаг из собранного-списка/р = построить список из списков с головой из обходимого-списка и хвостом собранным-списком,
где обходимый список = разность списка-последовательности и собранным-списком, в котором каждый элемент не диагонален собранному-списку
элемент/и не диагонален списку/д = одновременно истинен результат выражения "список-условий из элемента и списка"
список-условий из элемента и списка = построить список из результата выражения "элемент не на диагонали с проверяемый-элемент с номером номер-элемента" из списка-с-номерами из списка трактуемого как пара из проверяемого-элемента/р и номера-элемента/р
список-с-номерами из списка/р = список пар из элементов списка и элементов списка-последовательности
элемент/и не на диагонали с проверяемым-элементом/д с номером номер/и = модуль разности элемента и проверяемого элемента не равен номеру
Второе точно более читабельно?