thedeemon: (office)
[personal profile] thedeemon
Периодически встречаю словосочетание "декларативное программирование", которое противопоставляют императивному, сопровождая формулой "описывается, что должно быть получено, а не как оно должно быть получено". Известный пример декларативного языка - SQL. Еще к декларативщине частенько относят хаскель и другие ФЯ, но вот с ними проблема: сколько кода я на них видел, (практически) везде было явное описание процесса вычисления, т.е. код был все же императивным по сути (создать список такой-то, свернуть его так-то, построить дерево такое-то и т.д. - это все про "как"). Вопрос к залу: покажите максимально декларативное решение (на любом языке, в том числе еще не существующем и чисто гипотетическом) следующей задачи.

Есть последовательность байтов (фиксированный массив/список или потенциально бесконечный поток - на ваш выбор), нужно их сжать RLE методом по мотивам формата PCX: в выходном потоке байт Х <= 192 обозначает сам себя, а байт Х > 192 означает Х-192 повторений следующего за ним байта. Т.е. последовательность
1, 1, 2, 3, 2, 2, 2, 200, 0, 200, 200, 200, 200
должна превращаться в
194, 1, 2, 3, 195, 2, 193, 200, 0, 196, 200

Date: 2012-12-25 12:34 pm (UTC)
From: [identity profile] Игорь Петров (from livejournal.com)
По-моему, такое определение декларативности ни на что не годится. Зачем нужны определения? Во-первых, для коммуникации, а коммуникации не получится, когда определение каждый понимает по-своему. Во-вторых, для классификации, но и тут проблема, потому что отличать декларативный код от императивного это определение не позволяет. А все потому, что оно характеризует не код, а некое отношение к коду некоего программиста в некий момент времени.
Второе и третье (обсуждаемое там, естественно, первое) определения декларативности из википедии, например, не такие плохие:
2) Any programming language that lacks side effects (or more specifically, is referentially transparent)
3) A language with a clear correspondence to mathematical logic.

Второе, впрочем, испорчено "сайд-эффектами", так что лучше бы они ограничились тем, что после "or more specifically", да и третье не без недостатков.

Date: 2012-12-25 03:30 pm (UTC)
From: [identity profile] thedeemon.livejournal.com
Я согласен, определение фиговое. Но про сайд-эффекты и ссылочную прозрачность еще хуже, вообще мимо. Третий вариант лучше, но достаточно ли хорош, я пока не уверен.

Profile

thedeemon: (Default)
Dmitry Popov

December 2025

S M T W T F S
 12 3456
789101112 13
14151617181920
21222324252627
28293031   

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jan. 29th, 2026 03:26 am
Powered by Dreamwidth Studios