Vertegenwoordigen code algebraïsch

stemmen
5

Ik heb een aantal kleine algoritmen die ik zou willen om te schrijven in een paper. Ze zijn relatief kort en bondig. Maar in plaats van het schrijven van hen in pseudo-code (à la Cormen of zelfs Knuth), zou ik graag een algebraïsche voorstelling van hen (meer lineaire en betere LaTeX rendering) te schrijven. Maar ik kan niet de middelen vinden om de beste notatie voor dit, als er iets is: bijvoorbeeld hoe Ik vertegenwoordig een lus? Als? De toevoeging van een tupel om een ​​lijst?

Heeft iemand van jullie ondervonden dit probleem, en een of andere manier opgelost?

Bedankt.

EDIT : Bedankt, mensen. Ik denk dat ik een slechte baan bij het formuleren van de vraag. Hier opnieuw gaat het, hoop dat ik het duidelijker: wat is de gemeenschappelijke notatie voor het over loops en als-dan-clausules in een wiskundige notatie? Bijvoorbeeld, kan ik gebruiken $acc \leftarrow acc \cup \langle i,i+1 \rangle$om de methode add van een lijst te vertegenwoordigen.

De vraag is gesteld op 28/01/2010 om 20:50
bron van user
In andere talen...                            


8 antwoorden

stemmen
0

Zoiets als dit website beschrijft?

antwoordde op 28/01/2010 om 20:57
bron van user

stemmen
1

Je zou kunnen kijken naar Haskell nemen. Haskell formaten goed in latex, heeft een mooie algebraïsche syntax, en je kunt zelfs een latex-bestand met Haskell samenstellen in, op voorwaarde dat de code wordt verpakt in \begin{code}en \end{code}. Zie hier: http://www.haskell.org/haskellwiki/Literate_programming . Er zijn waarschijnlijk geletterd programmeertools voor andere talen.

antwoordde op 28/01/2010 om 20:59
bron van user

stemmen
2

Ik zou Knuth kopiëren. Weinigen weten hoe ze beter dan hem te communiceren in een computer science setting.

antwoordde op 28/01/2010 om 21:00
bron van user

stemmen
-1

APL ? Het enige probleem is dat weinig mensen het kunnen lezen.

antwoordde op 28/01/2010 om 21:00
bron van user

stemmen
8

Doe dit niet. U bent afwijken van wat de mensen verwachten te zien wanneer zij een paper over algoritmen te lezen. Je moet verwachte praktijken te volgen; uw ideeën hebben meer kans om de aandacht die ze verdienen. Wanneer je in Rome bent, doe dan zoals de Romeinen doen.

Opmaakcode (of pseudocode het ook is) in een gelatexeerd papier gemakkelijk. Zie bijvoorbeeld, het formatteren van code in LaTeX .

antwoordde op 28/01/2010 om 21:03
bron van user

stemmen
1

Lisp begon als een wiskundige notatie van een computing-model, zodat de docent een beter instrument dan Turingmachines zou hebben. Per ongeluk, blijkt dat het in de montage kan worden uitgevoerd - dus lisp, werd de programmeertaal geboren.

Maar ik denk niet dat dit echt is wat je zoekt, omdat de computing-model dat lisp beschrijft niet lussen: recursie wordt gebruikt in plaats. De syntaxis afgeleid van algebra waarbij braces duiden evaluatie-dit-en-substituut-the-resultaat. Inderdaad, lisp het model van de computer is eigenlijk substitutie - wat algebra in wezen is.

Sterker nog, de meeste functionele talen zoals Lisp, Haskell en Erlang zijn afgeleid van de wiskunde. Haskell is eigenlijk een gevolg te bewijzen dat lambdacalculus kan worden gebruikt om het type systemen te implementeren. Dus Haskell, zoals Lisp werd geboren uit pure wiskunde. Maar nogmaals, de syntax is niet wat je waarschijnlijk zou worden gebruikt om.

U kunt zeker uitleggen Lisp en Haskell syntax wiskundigen en zij zouden behandelen als een "spel". Taalconstructies zoals lussen, terugkeer en voorwaardelijke bewezen kan worden uit de regels van het spel in plaats van blindelings uitgevoerd als in andere talen. Dit zou je leiden naar de rijken van combinatronics, een andere tak van de wiskunde. Sterker nog, in combinatronics, zelfs het concept van de nummers kunnen worden uit de regels van het spel gebouwd in plaats van een inwoner deel van de taal (google Church cijfers).

Dus eens een kijkje op Lisp / Scheme, Erlang en Haskell als je wilt. Erlang heeft vooral syntax dicht bij wat je wilt:

add(a,b) -> a + b

Maar mijn aanbeveling is om te schrijven in C-achtige pseudo-code. Het is een soort van de kleinste gemene deler in programmeertalen. Heeft een syntax dat is vrij eenvoudig te begrijpen en schoon. En de syntaxis van de functie ontleent zelfs van functies in de wiskunde. Remember f(x)?

Als een plus, worden wiskundigen gebruikt voor het schrijven van C, zijn statistici gebruikt voor het schrijven van C (hoewel zij over het algemeen R) verkiest, worden natuurkundigen gebruikt voor het schrijven van C, zijn programmeurs gebruikt om ten minste kijken naar C (Ik ken een paar mensen die nog nooit aangeraakt C).

Eigenlijk, schrap dat. U vermeldt dat uw doelgroep zijn statistici. Schrijf in R

antwoordde op 28/01/2010 om 21:47
bron van user

stemmen
7

Ik zien of-uitingen in wiskundige notatie vrij vaak. Zoals gewoonlijk een lus een recursierelatie of op equivalente wijze een functie recursief gedefinieerd.

Hier is hoe de Ackermann functie wordt gedefinieerd op Wikipedia, bijvoorbeeld:

A (m, n) = n + 1 als m = 0;  A (m-1, 1) wanneer m> 0 en n = 0;  en A (m-1, A (m, n-1)) wanneer m> 0 en n> 0.

Deze foto is mooi omdat het voelt wiskundige in smaak en toch kon je duidelijk typt u het in bijna precies zoals geschreven en hebben een implementatie. Het is niet altijd mogelijk om dat te bereiken.

Andere wiskundige notaties die overeenkomen met lussen omvatten Σ-notatie voor sommatie en set-builder notatie .

Ik hoop dat dit antwoord op uw vraag! Maar als je doel is om te beschrijven hoe iets wordt gedaan en hebben iemand te begrijpen, ik denk dat het waarschijnlijk een vergissing om te veronderstellen dat wiskundigen liever vergelijkingen te zien. Ik denk niet dat ze verwisselbare gereedschappen (ondanks Turing gelijkwaardigheid). Als uw algoritme gaat veranderlijk datastructuren, is procedurele code waarschijnlijk gaan om beter dan vergelijkingen voor het uit te leggen zijn.

antwoordde op 29/01/2010 om 00:21
bron van user

stemmen
2

Een symbool voor algemene loops bestaat niet; meestal kunt u gebruik maken sommatie operator . "if" wordt weergegeven met behulp van implicaties , en "voeg een tupel om een lijst met" je zou gebruiken unie .

Echter , in het algemeen, een beetje breedsprakigheid is niet per se een slechte zaak - soms, met name voor complexe algoritmen, is het het beste om het uit te spellen in gewoon Engels, de hand van voorbeelden en diagrammen. Dit is dubbel geldt ook voor niet-programmeurs.

Denk er eens over: wanneer u een wiskunde tekst-boek over het algoritme van Euclides voor GCD, of de zeef van Eratosthenes te lezen, hoe is het geschreven? Gewoonlijk, het algoritme zelf in proza, terwijl het bewijs van het algoritme is waar de wiskundige symbolen liggen.

antwoordde op 29/01/2010 om 02:00
bron van user

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