Я должен перевести некоторый Python и стандартные программы Java в псевдо код для моего основного тезиса, но испытать затруднения, придумывающие синтаксис/стиль, который является:
Как Вы пишете псевдо код? Есть ли какие-либо стандартные рекомендации?
Я рекомендую посмотреть книгу «Введение в алгоритмы» (написанные Корменом, Лейзерсоном и Ривестом). Я всегда считал его псевдокодовое описание алгоритмов очень ясным и последовательным.
Пример:
DIJKSTRA(G, w, s)
1 INITIALIZE-SINGLE-SOURCE(G, s)
2 S ← Ø
3 Q ← V[G]
4 while Q ≠ Ø
5 do u ← EXTRACT-MIN(Q)
6 S ← S ∪{u}
7 for each vertex v ∈ Adj[u]
8 do RELAX(u, v, w)
Я не понимаю вашего требования "не слишком близко к какому-то конкретному языку программирования".
Python обычно считается хорошим кандидатом для написания псевдокода. Возможно, вам подойдет немного упрощенная версия python.
Если код является процедурным, нормальный псевдокод, вероятно, будет несложным (в Википедии есть несколько примеров).
Объектно-ориентированный псевдокод может быть сложнее. Рассмотрим:
Паскаль всегда был наиболее похож на псевдокод, когда дело доходит до математического и технические области. Не знаю почему, просто так было всегда.
У меня есть некоторые (о, я не знаю, может быть, 10 книг на полке, которые конкретизируют эту теорию).
Python, как предполагается, может быть хорошим кодом, но также может быть настолько нечитаемым, что сам по себе является чудом. Старые языки сложнее сделать нечитаемыми - они «проще» (воспринимайте осторожно), чем сегодняшние. Возможно, им будет труднее понять, что происходит, но их легче читать (требуется меньше синтаксических / языковых функций, чтобы понять, что делает программа).
Отвечая на свой собственный вопрос, я просто хотел обратить внимание на статью TeX FAQ Typesetting pseudocode in LaTeX. В ней описывается несколько различных стилей, перечисляются преимущества и недостатки. Кстати, существуют две таблицы стилей для написания псевдокода в манере, используемой в "Introductin to Algorithms" Кормена, как рекомендовано выше: newalg
и clrscode
. Последний был написан самим Корменом.
Предлагаю вам взглянуть на язык программирования Fortress .
Это фактический язык программирования, а не псевдокод , но он был разработан так, чтобы быть максимально приближенным к исполняемому псевдокоду. В частности, для разработки синтаксиса они прочитали и проанализировали сотни статей, курсов, книг и журналов по CS и математике, чтобы найти общие шаблоны использования псевдокода и других вычислительных / математических обозначений.
Вы можете использовать все эти исследования, просто взглянув на исходный код Fortress и абстрагируясь от того, что вам не нужно, поскольку ваша целевая аудитория - люди, а Fortress - это компилятор.
Вот реальный пример выполнения кода Fortress из NAS (NASA Advanced Supercomputing) Conjugate Gradient Parallel Benchmark . Для развлечения сравните спецификацию эталонного теста с реализацией в Fortress и обратите внимание на соответствие почти 1: 1. Также сравните реализацию на нескольких других языках, таких как C или Fortran, и обратите внимание, что они не имеют абсолютно ничего общего со спецификацией (а также часто на порядок длиннее спецификации).
Подчеркну: это не псевдокод, это реально работающий код Fortress! Пример кода крепости http://ProjectFortress.Sun.Com/Projects/Community/raw-attachment/wiki/FortressQuestions/NAS-CG.png
Изменить: ссылка на приведенный выше пример кода мертва. Возможно, похожий пример можно найти здесь: https: //umbilicus.wordpress.com / 2009/10/16 / fortress-parallel-by-default /