Представление кода алгебраически

голоса
5

У меня есть несколько небольших алгоритмы, которые я хотел бы написать в бумаге. Они являются относительно короткими и лаконичными. Однако, вместо того, чтобы писать их в псевдокоде (а-ля Cormen или даже Кнут), я хотел бы написать алгебраическое представление о них (более линейным и лучшее представление LaTeX). Тем не менее, я не могу найти ресурсы, чтобы наилучшую нотацию для этого, если есть что-нибудь: например, как я представляю петлю? Если? Добавление кортежа в список?

Ли какой-либо из вас сталкивался с этой проблемой, и как-то решить ее?

Благодарю.

EDIT : Спасибо, люди. Я думаю , что я сделал плохую работу на формулируя вопрос. Здесь идет снова, надеясь , что делает его более ясным: что является общим для обозначения говорить о циклах и если-то пунктах в математической нотации? Например, я могу использовать , $acc \leftarrow acc \cup \langle i,i+1 \rangle$чтобы представить метод «добавить» список.

Задан 28/01/2010 в 20:50
источник пользователем
На других языках...                            


8 ответов

голоса
0

Что - то вроде этого сайта описывает?

Ответил 28/01/2010 в 20:57
источник пользователем

голоса
1

Вы можете взглянуть на Haskell. Haskell форматы хорошо в латексе, имеет приятный алгебраический синтаксис, и вы даже можете составить латексный файл с Haskell в нем, при условии , что код обернут в \begin{code}и \end{code}. Смотрите здесь: http://www.haskell.org/haskellwiki/Literate_programming . Есть , вероятно , грамотные средства программирования для других языков.

Ответил 28/01/2010 в 20:59
источник пользователем

голоса
2

Я бы скопировать Кнут. Мало кто знает, как общаться лучше, чем он в условиях компьютерной науки.

Ответил 28/01/2010 в 21:00
источник пользователем

голоса
-1

APL ? Единственная проблема заключается в том , что мало кто может читать.

Ответил 28/01/2010 в 21:00
источник пользователем

голоса
8

Не делайте этого. Вы отклонились от того, что люди ожидают увидеть когда они читают статью об алгоритмах. Вы должны следовать ожидаемой практике; ваши идеи, скорее всего, чтобы привлечь внимание, которого они заслуживают. Когда в Риме, делай, как римляне делают.

Форматирование кода (или псевдокод , как это может быть) в LaTeXed бумаге очень легко. Смотрите, например, форматирование кода в LaTeX .

Ответил 28/01/2010 в 21:03
источник пользователем

голоса
1

Lisp начинал как математическая нотацию вычислительной модели, так что преподаватель будет иметь лучший инструмент, чем машины Тьюринга. Случайно выясняется, что он может быть реализован в сборке - таким образом, шепелявость, язык программирования был рожден.

Но я не думаю, что это действительно то, что вы ищете, так как вычислительная модель, которая описывает сюсюкать не имеют петли: рекурсия используется вместо этого. Синтаксис вытекает из алгебры, где фигурные скобки обозначают оценки-это-и-заменитель-на-результат. Действительно, модель Lisp-вычислительной техники в основном замена - то, что алгебра является по существу.

Действительно, большинство функциональных языков, таких как Lisp, Haskell и Erlang являются производными от математики. Haskell на самом деле является результатом доказательства того, что лямбда-исчисление может использоваться для реализации систем типа. Так Haskell, как Лисп родилась из чистой математики. Но опять же, синтаксис не то, что вы, вероятно, будет использоваться для.

Вы, конечно, можно объяснить синтаксис Lisp и Haskell для математиков, и они будут относиться к нему как «игры». Языковые конструкции, такие как циклы, рекурсия и условные могут быть доказаны из правил игры, а не слепо реализованные как и в других языках. Это приведет вас в сферы combinatronics, другая ветвь математики. Действительно, в combinatronics, даже понятие чисел может быть построено из правил игры, а не коренная часть языка (Google Чёрч).

Так что посмотрим на Лиспа / Scheme, Erlang и Haskell, если вы хотите. Erlang особенно имеет синтаксис близко к тому, что вы хотите:

add(a,b) -> a + b

Но моя рекомендация состоит в том, чтобы писать на C-подобный псевдокод. Это своего рода наименьшему общему знаменателю в языках программирования. Имеет синтаксис , который довольно легко понять и чистый. А синтаксис функции даже вытекает из функций в области математики. Запомнить f(x)?

Как плюс, математики используются для написания C, статистики используются для написания C (хотя, как правило, они предпочитают R), физики используются для написания C, программисты используют, по крайней мере, глядя на C (я знаю несколько, которые никогда не прикоснулся C).

На самом деле, царапает что. Вы сказали , что ваша целевая аудитория статистикам. Написать в R

Ответил 28/01/2010 в 21:47
источник пользователем

голоса
7

Я вижу , если-выражений в математической нотации довольно часто. Обычная вещь для петли является рекуррентным соотношением , или , что эквивалентно, функция , заданной рекурсивна.

Вот как функция Аккермана определяется в Википедии, например:

А (т, п) = п + 1, если т = 0;  А (м-1, 1), если т> 0 и п = 0;  и А (м-1, А (т, п-1)), если т> 0 и п> 0.

Эта картина хорошо, потому что он чувствует себя математический вкус и все же вы могли четко ввести его в почти точно так, как написано и есть реализация. Это не всегда удается добиться.

Другие математические обозначения, соответствующие циклы включают Е-нотацию для суммирования и набор-строитель обозначение .

Надеюсь, это ответит на ваш вопрос! Но если ваша цель состоит в том, чтобы описать, как это делается что-то и кто-то понять, я думаю, что это, вероятно, ошибочно полагать, что математики предпочли бы видеть уравнения. Я не думаю, что они взаимозаменяемые инструменты (несмотря на Тьюринга эквивалентности). Если ваш алгоритм включает в себя изменяемые структуры данных, процедурный код, вероятно, будет лучше, чем уравнения для объяснения.

Ответил 29/01/2010 в 00:21
источник пользователем

голоса
2

Символ для общих контуров не существует; как правило , вы будете использовать оператор суммирования . «если» представляется с использованием последствий , и «добавить кортеж в список» вы бы использовать союз .

Однако , в общем, немного многословия не обязательно плохо - иногда, особенно для сложных алгоритмов, то лучше объяснить это на простом английском языке, используя примеры и схему. Это вдвойне верно для не-кодеров.

Подумайте об этом: когда вы читаете по математике учебник по алгоритму Евклида для НОД, или решето Эратосфена, как это написано? Как правило, сам алгоритм в прозе, в то время как доказательство алгоритма, где математические символы лежат.

Ответил 29/01/2010 в 02:00
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more