Représentant le code algébriquement

voix
5

J'ai un certain nombre de petits algorithmes que je voudrais écrire dans un document. Ils sont relativement courts et concis. Cependant, au lieu de les écrire en pseudo-code (à la Cormen ou même Knuth), je voudrais écrire une représentation algébrique d'entre eux (plus linéaire et un meilleur rendu LaTeX). Cependant, je ne peux pas trouver des ressources à la meilleure notation pour cela, s'il y a quelque chose: par exemple, comment dois-je représenter une boucle? Si? L'ajout d'une ligne à une liste?

A l'un de vous rencontré ce problème, et en quelque sorte résolu?

Merci.

EDIT : Merci, les gens. Je pense que je l'ai fait un mauvais travail au phrasé la question. Ici va encore, en espérant que je le rendre plus clair: quelle est la notation commune pour parler de boucles et si-alors des clauses dans une notation mathématique? Par exemple, je peux utiliser $acc \leftarrow acc \cup \langle i,i+1 \rangle$pour représenter la méthode « ajouter » d'une liste.

Créé 28/01/2010 à 20:50
source utilisateur
Dans d'autres langues...                            


8 réponses

voix
0

Quelque chose comme ce site décrit?

Créé 28/01/2010 à 20:57
source utilisateur

voix
1

Vous pouvez jeter un oeil à Haskell. Haskell formats bien en latex, a une belle syntaxe algébrique, et vous pouvez même compiler un fichier latex avec Haskell en elle, à condition que le code est enveloppé dans \begin{code}et \end{code}. Voir ici: http://www.haskell.org/haskellwiki/Literate_programming . Il existe des outils de programmation probablement alphabétisés pour d' autres langues.

Créé 28/01/2010 à 20:59
source utilisateur

voix
2

Je copie Knuth. Peu de gens savent comment communiquer mieux que lui dans un cadre informatique.

Créé 28/01/2010 à 21:00
source utilisateur

voix
-1

APL ? Le seul problème est que peu de gens peuvent le lire.

Créé 28/01/2010 à 21:00
source utilisateur

voix
8

Ne pas faire cela. Vous écartons de ce que les gens attendent de voir quand ils ont lu un document sur les algorithmes. Vous devez suivre les pratiques prévues; vos idées sont plus susceptibles d'attirer l'attention qu'ils méritent. A Rome, fais comme les Romains.

Mise en forme de code (ou pseudo - code comme il peut être) dans un document Compilé est très facile. Voir, par exemple, mise en forme du code dans LaTeX .

Créé 28/01/2010 à 21:03
source utilisateur

voix
1

Lisp a commencé comme une notation mathématique d'un modèle informatique afin que le professeur aurait un meilleur outil que les machines de Turing. Par hasard, il se avère qu'il peut être mis en œuvre dans l'assemblage - ainsi Lisp, le langage de programmation est née.

Mais je ne pense pas que ce soit vraiment ce que vous cherchez depuis le modèle de calcul qui lisp décrit ne pas boucles: récursion est utilisé à la place. La syntaxe dérive de l'algèbre où les accolades désignent évaluer-ce-et-substitut-the-résultat. En effet, le modèle de Lisp de l'informatique est fondamentalement substitution - ce que l'algèbre est essentiellement.

En effet, les langues les plus fonctionnels comme Lisp, Haskell et Erlang sont dérivées de mathématiques. Haskell est en fait un résultat de prouver que le calcul lambda peut être utilisé pour mettre en œuvre des systèmes de type. Donc, Haskell, comme Lisp est né des mathématiques pures. Mais encore une fois, la syntaxe est pas ce que vous seriez probablement habitué.

Vous pouvez certainement expliquer la syntaxe Lisp et Haskell aux mathématiciens et ils traiteraient comme un « jeu ». Les constructions de langage comme des boucles, récursivité et conditionals peuvent être prouvés hors des règles du jeu plutôt que aveuglément mis en œuvre comme dans d'autres langues. Cela vous mènera dans les domaines de la combinatronics, une autre branche des mathématiques. En effet, dans combinatronics, le concept même de nombres peut être construit à partir des règles du jeu plutôt que d'être une partie de la langue maternelle (Eglise google Numerals).

Alors jetez un oeil à Lisp / Scheme, Erlang et Haskell si vous voulez. Erlang a surtout syntaxe proche de ce que vous voulez:

add(a,b) -> a + b

Mais ma recommandation est d'écrire en C-pseudocode comme. Il est un peu plus petit dénominateur commun dans les langages de programmation. A une syntaxe qui est assez facile à comprendre et propre. Et la syntaxe de la fonction dérive même des fonctions en mathématiques. Rappelez - vous f(x)?

En plus, les mathématiciens sont utilisés pour l'écriture C, les statisticiens sont utilisés pour l'écriture C (bien que généralement ils préfèrent R), les physiciens sont utilisés pour l'écriture C, les programmeurs sont utilisés pour au moins regarder C (je sais que quelques-uns qui n'ont jamais touché C).

En fait, que gratter. Vous mentionnez que votre public cible sont les statisticiens. Ecrire dans R

Créé 28/01/2010 à 21:47
source utilisateur

voix
7

Je vois si-expressions en notation mathématique assez souvent. Ce qui est habituel pour une boucle est une relation de récurrence , ou de manière équivalente, une fonction définie de façon récursive.

Voici comment la fonction Ackermann est définie sur Wikipedia, par exemple:

A (m, n) = n + 1 si m = 0;  A (m-1, 1) si m> 0 et n = 0;  et A (m-1, A (m, n-1)) si m> 0 et n> 0.

Cette image est agréable parce qu'il se sent mathématique en saveur et pourtant vous pouvez clairement taper dans presque exactement comme écrit et ont une mise en œuvre. Il est pas toujours possible d'y parvenir.

D' autres notations mathématiques qui correspondent à des boucles comprennent Σ-notation pour la sommation et la notation constructeur établi .

J'espère que cela répond à votre question! Mais si votre objectif est de décrire comment quelque chose est fait et que quelqu'un comprend, je pense qu'il est probablement une erreur de supposer que les mathématiciens préféreraient voir les équations. Je ne pense pas qu'ils sont des outils interchangeables (en dépit de l'équivalence) Turing. Si votre algorithme implique des structures de données mutables, le code de procédure va probablement être mieux que les équations pour l'expliquer.

Créé 29/01/2010 à 00:21
source utilisateur

voix
2

Un symbole pour les boucles générales n'existe pas; En général vous utiliserez l' opérateur de sommation . « si » est représenté en utilisant des implications , et à « ajouter une ligne à une liste » vous utiliseriez union .

Cependant , en général, un peu de verbosité est pas nécessairement une mauvaise chose - parfois, en particulier pour des algorithmes complexes, il est préférable de le préciser en anglais simple, en utilisant des exemples et des diagrammes. Ceci est doublement vrai pour les non-programmeurs.

Pensez-y: lorsque vous lisez un livre de texte mathématiques sur l'algorithme d'Euclide pour GCD, ou le tamis d'Eratosthène, comment est-il écrit? En général, l'algorithme lui-même est en prose, alors que la preuve de l'algorithme est où les symboles mathématiques se trouvent.

Créé 29/01/2010 à 02:00
source utilisateur

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