Rappresentare il codice algebricamente

voti
5

Ho un certo numero di piccoli algoritmi che vorrei scrivere in un documento. Essi sono relativamente brevi e concisi. Tuttavia, invece di scrittura in pseudo-codice (à la Cormen o addirittura Knuth), desidero scrivere una rappresentazione algebrica di loro (più lineare e una migliore resa LaTeX). Tuttavia, non riesco a trovare le risorse per il miglior notazione per questo, se c'è qualcosa: ad esempio, come faccio io rappresento un ciclo? Se? L'aggiunta di una tupla a un elenco?

Ha qualcuno di voi riscontrato questo problema, e in qualche modo risolto?

Grazie.

EDIT : Grazie, la gente. Penso di aver fatto un pessimo lavoro al fraseggio la questione. Qui va ancora una volta, sperando di renderlo più chiaro: qual è la notazione comune per parlare di loop e if-then clausole in una notazione matematica? Per esempio, posso usare $acc \leftarrow acc \cup \langle i,i+1 \rangle$per rappresentare il metodo di aggiungere di una lista.

È pubblicato 28/01/2010 alle 20:50
fonte dall'utente
In altre lingue...                            


8 risposte

voti
0

Qualcosa di simile a questo sito web descrive?

Risposto il 28/01/2010 a 20:57
fonte dall'utente

voti
1

Si potrebbe dare un'occhiata a Haskell. Haskell formatta bene in lattice, ha un bel sintassi algebrica, e si può anche compilare un file di lattice con Haskell in essa, a condizione che il codice è avvolto in \begin{code}e \end{code}. Vedi qui: http://www.haskell.org/haskellwiki/Literate_programming . Probabilmente ci sono strumenti di programmazione alfabetizzati per altre lingue.

Risposto il 28/01/2010 a 20:59
fonte dall'utente

voti
2

Mi piacerebbe copiare Knuth. Pochi sanno come comunicare meglio di lui in un ambiente di informatica.

Risposto il 28/01/2010 a 21:00
fonte dall'utente

voti
-1

APL ? L'unico problema è che poche persone possono leggerlo.

Risposto il 28/01/2010 a 21:00
fonte dall'utente

voti
8

Non fare questo. Si deviazione da ciò che la gente si aspetta di vedere quando leggono un giornale su algoritmi. Si dovrebbe seguire le pratiche attesi; le tue idee sono più probabilità di ottenere l'attenzione che meritano. Paese che vai, usanze che trovi.

Formattazione codice (o pseudocodice come può essere) in un documento LaTeXed è molto semplice. Si veda, ad esempio, la formattazione del codice in LaTeX .

Risposto il 28/01/2010 a 21:03
fonte dall'utente

voti
1

Lisp iniziato come una notazione matematica di un modello di calcolo in modo che il docente avrebbe uno strumento migliore rispetto alle macchine di Turing. Per caso, si scopre che esso può essere implementato in assemblea - in tal modo Lisp, il linguaggio di programmazione è nato.

Ma io non credo che questo è davvero quello che state cercando in quanto il modello di calcolo che Lisp descrive non ha cicli: la ricorsione è usato al posto. La sintassi deriva dal algebra dove parentesi indicano valutare-questo-e-sostituto-il-risultato. In effetti, il modello di lisca di computing è fondamentalmente di sostituzione - ciò che l'algebra è essenzialmente.

Infatti, lingue più funzionali come il Lisp, Haskell e Erlang derivano dalla matematica. Haskell è in realtà un risultato di dimostrare che lambda calcolo può essere utilizzato per implementare sistemi di tipo. Così Haskell, come Lisp è nato fuori della matematica pura. Ma ancora una volta, la sintassi non è quello che si sarebbe probabilmente abituati.

Si può certamente spiegare la sintassi Lisp e Haskell ai matematici e avrebbero trattarlo come un "gioco". costrutti del linguaggio come i cicli, la ricorsione e condizionali può essere provata fuori dalle regole del gioco, piuttosto che alla cieca implementato come in altre lingue. Ciò porterebbe nei regni di combinatronics, un altro ramo della matematica. Infatti, in combinatronics, anche il concetto di numeri può essere costruito fuori dalle regole del gioco, piuttosto che essere una parte nativa del linguaggio (Google Chiesa numeri).

Quindi, dare un'occhiata a Lisp / Scheme, Erlang e Haskell, se si desidera. Erlang ha in particolare sintassi vicino a quello che si vuole:

add(a,b) -> a + b

Ma la mia raccomandazione è quella di scrivere in C-come pseudocodice. E 'una sorta di minimo comune denominatore nei linguaggi di programmazione. Ha una sintassi che è abbastanza facile da capire e pulito. E la sintassi della funzione deriva anche da funzioni in matematica. Ricordate f(x)?

Come un plus, i matematici sono utilizzati per la scrittura C, statistici vengono utilizzati per la scrittura C (anche se generalmente preferiscono R), i fisici sono utilizzati per la scrittura C, i programmatori sono utilizzati per almeno guardando C (lo so pochi che non hai mai toccato C).

In realtà, graffio che. Si menziona che il pubblico di destinazione sono gli statistici. Scrivere in R

Risposto il 28/01/2010 a 21:47
fonte dall'utente

voti
7

Vedo se-espressioni in notazione matematica abbastanza spesso. La cosa usuale per un ciclo è una relazione di ricorrenza , o equivalentemente, una funzione definita ricorsivamente.

Ecco come la funzione di Ackermann è definita su Wikipedia, per esempio:

A (m, n) = n + 1 se m = 0;  A (m-1, 1) se m> 0 ed n = 0;  e A (m-1, A (m, n-1)) se m> 0 e n> 0.

Questa immagine è bello perché ci si sente matematica nel sapore e ancora si poteva chiaramente digitarlo nella quasi esattamente come scritto e hanno un'implementazione. Non sempre è possibile raggiungere questo obiettivo.

Altre notazioni matematiche che corrispondono agli anelli includono Σ-notazione per sommatoria e notazione set-builder .

Spero che questo risponde alla tua domanda! Ma se il vostro scopo è quello di descrivere come si fa qualcosa e avere qualcuno capire, penso che sia probabilmente un errore presumere che i matematici preferirebbero vedere equazioni. Non credo che siano gli utensili intercambiabili (nonostante Turing equivalenza). Se il vostro algoritmo coinvolge strutture di dati mutabili, codice procedurale è destinata probabilmente ad essere migliore di equazioni per spiegarlo.

Risposto il 29/01/2010 a 00:21
fonte dall'utente

voti
2

Un simbolo per i cicli generali non esiste; di solito si utilizzerà l'operatore di sommatoria . "se" è rappresentato con implicazioni , e di "aggiungere una tupla a un elenco" si usa l'unione .

Tuttavia , in generale, un po 'di prolissità non è necessariamente una cosa negativa - a volte, soprattutto per i complessi algoritmi, è meglio chiarirne il significato in parole povere, usando esempi e schemi. Questo è doppiamente vero per i non programmatori.

Pensateci: quando si legge un libro di testo di matematica su un algoritmo di Euclide per GCD, o il crivello di Eratostene, come sta scritto? Di solito, lo stesso algoritmo è in prosa, mentre la prova dell'algoritmo è dove i simboli matematici si trovano.

Risposto il 29/01/2010 a 02:00
fonte dall'utente

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