|
Декомпозиция встроенная в язык (пятничное) | ☑ | ||
---|---|---|---|---|
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/></<> ^^
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |