Имя: Пароль:
1C
 
Декомпозиция встроенная в язык (пятничное)
0 Ndochp
 
05.12.14
15:50
Везде пишут, сначала ставь цель, потом декомпозируй на этапы, потом разбивай каждый этап на шаги.
А программы мы всегда пишем наоборот - это А, это В, это С Если С больше 10, то сложи А и В, положи в Рез, иначе рассчитай А-Б, положи в Рез, верни Рез.
Никто не встречал язык, в котором было бы наоборот:
Функция(А, Б, Ц)
{
Возврат Рез;
Рез = ?(С<10, Сумма, Разность);
Сумма = А+Б;
Разность = А-Б;
}
И пускай себе исполняется только то, что нужно после запуска. (то есть несмотря на то, что и сумма и разность описаны в коде подряд, вычисляться должна только одна, так как уже на второй строке мы знаем кто именно нам нужен для результата).
1 Banned
 
05.12.14
15:51
Lazy функциональщина детектед.
Не нужна она.
2 Волшебник
 
модератор
05.12.14
15:56
Программировать можно сверху вниз, тогда начинаешь от цели и делаешь функции-заглушки
3 Лефмихалыч
 
05.12.14
15:58
(0) в программировании это называется прототипированием, но выполняется оно намного более иначе, чем тот наебахтунг, который ты нарисовал
4 Banned
 
05.12.14
15:59
(3) фи, поручик...
5 Ndochp
 
05.12.14
15:59
(3) Не, прототипирование это то, что в (2) указано.
У меня совсем другой наебахтунг.
6 Kolls
 
05.12.14
15:59
Оптимизатор кода скорее всего выкинет ненужные строки, во всяком случае норм. компиляторы так делают
7 Asmody
 
05.12.14
16:00
(0) Haskell так делает. Называется "ленивые вычисления". Там функции сначала выводятся, а затем — вычисляются.
8 Ndochp
 
05.12.14
16:00
(6) Там нет ненужных строк. Ты же не знаешь, какое С прийдет.
9 ifso
 
05.12.14
16:03
(8) ну, раз незнает, то фсё и выкинет )
10 Ndochp
 
05.12.14
16:14
(7) Не, ленивые вычисления здесь не самоцель, а побочный эффект. Вопрос именно в написании с результата и назад.

А мне по размышлении пролог напомнило.

функция(Рез, А, Б, С):- С < 10, сумма(Рез, А, Б).
функция(Рез, А, Б, С):- С > 10, разность(Рез, А, Б).
сумма(Рез, А, Б):- Рез is А + Б.
разность(Рез, А, Б):- Рез is А - Б.

Хотя, при большой длине функции она все равно описывается практически как последовательность действий по перебору.
11 Asmody
 
05.12.14
16:21
(10) ну так Haskell так и поступает: он сначала _выводит_ функцию, а потом вычисляет аргументы, при том только те, которые необходимы.
12 Ndochp
 
05.12.14
16:22
(11) Так то хаскель, то есть в процессе выполнения, а код у него как написан? от возврата к детализации или  наоборот?
13 SUA
 
05.12.14
16:23
реализуй - функция меняет значения аргументов местами и возвращает их сумму
14 antgrom
 
05.12.14
16:27
только меня покоробило что в коде "ц" ("с") то русская , то латинская ?
15 Ndochp
 
05.12.14
16:29
(13)
Ф(А, Б)
{
Возврат Рез;
Рез = А+Б;
А = Темп1;
Б = Темп2;
Темп1 = Б;
Темп2 = А;
}

(14) Это все больше меньше виноваты с пунтой на пару.
16 Banned
 
05.12.14
16:29
(14) Что такое "зануда" - не надо напоминать? )))
17 Fragster
 
гуру
05.12.14
16:37
18 Fragster
 
гуру
05.12.14
16:38
19 Asmody
 
05.12.14
16:44
(12) А какая разница, если ты пишешь в функциональном стиле? В ФП нет понятия "порядок вычисления". Там имена функций и переменных суть такая же, как в математике — просто "укороченная" запись некоторого выражения. При исполнении программы эта запись "разворачивается", т.е. на место переменных ставятся выражения, и только после этого происходит собственно вычисление.
20 Ndochp
 
05.12.14
16:46
(19) Значит надо почитать обзорку по Хаскелю. Спасибо за направление.
21 Asmody
 
05.12.14
16:47
отсюда можно начать http://dshevchenko.biz/hs.html
22 Ненавижу 1С
 
гуру
05.12.14
17:07
LLUN >< ОНЕЛЕДЕРПОЕН
23 Banned
 
05.12.14
17:08
(22) Рановато начал....
24 Йохохо
 
05.12.14
17:13
(22) s/></<> ^^
Основная теорема систематики: Новые системы плодят новые проблемы.