LINUX.ORG.RU

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

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

Ошибку в чистой функции можно найти, просто внимательно изучая её входные данные и код (не только в Clojure). Чем больше логики реализовано в виде чистых функций — тем менее нужен отладчик.

А как именно это работает? Вот возьмем функцию на чистом языке:

function add(input: { a: int, b: int }) -> { c: int }
{
  return { c: input.a + input.b };
} 
А теперь на нечистом:
int a;
int b;
int c;

function add(input: {}) -> {} 
{
  c = a + b; 
}
Вся разница между ними, что в нечистом языке внешние и изменяемые переменные автоматически добавляются в input и result, и все вызывы связаны в цепочку, где передается состояние. Разница больше синтаксическая.

Цепочки строятся так:

// Императивный код который пишет программист
add()
add() 

// Модель в которую его преобразуют, тут args пустые оба
state1 = add(state0 + args) 
state2 = add(state1 + args)

Что дает чистый синтаксис? Почему он проще? Сколько было переменных, столько и осталось.

Исправление MOPKOBKA, :

Ошибку в чистой функции можно найти, просто внимательно изучая её входные данные и код (не только в Clojure). Чем больше логики реализовано в виде чистых функций — тем менее нужен отладчик.

А как именно это работает? Вот возьмем функцию на чистом языке:

function add(input: { a: int, b: int }) -> { c: int }
{
  return { c: input.a + input.b };
} 
А теперь на нечистом:
int a;
int b;
int c;

function add(input: {}) -> {} 
{
  c = a + b; 
}
Вся разница между ними, что в нечистом языке внешние и изменяемые переменные автоматически добавляются в input и result, и все вызывы связаны в цепочку, где передается состояние. Разница больше синтаксическая.

Цепочки строятся так:

// Императивный код который пишет программист
add()
add() 

// Модель в которую его преобразуют, тут args пустые оба
state1 = add(state0 + args) 
state2 = add(state1 + args)

Исправление MOPKOBKA, :

Ошибку в чистой функции можно найти, просто внимательно изучая её входные данные и код (не только в Clojure). Чем больше логики реализовано в виде чистых функций — тем менее нужен отладчик.

А как именно это работает? Вот возьмем функцию на чистом языке:

function add(input: { a: int, b: int }) -> { c: int }
{
  return { c: input.a + input.b };
} 
А теперь на нечистом:
int a;
int b;
int c;

function add(input: {}) -> {} 
{
  c = a + b; 
}
Вся разница между ними, что в нечистом языке внешние и изменяемые переменные автоматически добавляются в input и result, и все вызывы связаны в цепочку, где передается состояние. Разница больше синтаксическая.

Цепочки строятся так:

// Императивный код который пишет программист
add()
add() 

// Модель в которую его преобразуют
state1 = add(state0 + args) 
state2 = add(state1 + args)

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

Ошибку в чистой функции можно найти, просто внимательно изучая её входные данные и код (не только в Clojure). Чем больше логики реализовано в виде чистых функций — тем менее нужен отладчик.

А как именно это работает? Вот возьмем функцию на чистом языке:

function add(input: { a: int, b: int }) -> { c: int }
{
  return { c: input.a + input.b };
} 
А теперь на нечистом:
int a;
int b;
int c;

function add(input: {}) -> {} 
{
  c = a + b; 
}
Вся разница между ними, что в нечистом языке внешние и изменяемые переменные автоматически добавляются в input и result, и все вызывы связаны в цепочку, где передается состояние. Разница больше синтаксическая.