Reprezentující kód algebraicky

hlasů
5

Mám několik malých algoritmů, které bych chtěl psát do papíru. Oni jsou relativně krátké a stručné. Avšak namísto psaní je v pseudo-kódu (à la CORMEN nebo dokonce Knuth), chtěl bych psát algebraické reprezentaci z nich (více lineární a lepší vykreslení latexu). Nicméně, nemohu najít zdroje, pokud jde o nejlepší notací pro to, jestli tam je něco: například jak mohu reprezentovat smyčku? Li? Přídavek n-tice do seznamu?

Má někdo z vás na tento problém narazili, a nějak vyřešil?

Dík.

EDIT : Díky, lidi. Myslím, že jsem odvedl špatnou práci v frázování otázku. Tady jde zase doufal, že aby bylo jasnější, co je společný zápis pro mluví o smyček a if-then doložek v matematickém zápisu? Například, mohu použít $acc \leftarrow acc \cup \langle i,i+1 \rangle$k reprezentaci metodu „přidat“ ze seznamu.

Položena 28/01/2010 v 20:50
zdroj uživatelem
V jiných jazycích...                            


8 odpovědí

hlasů
0

Něco podobného této webové stránky popisuje?

Odpovězeno 28/01/2010 v 20:57
zdroj uživatelem

hlasů
1

Dalo by se podívat na Haskell. Haskell formáty dobře v latexu, má pěknou algebraické syntaxi, a dokonce můžete sestavit soubor latexové s Haskell v něm, za předpokladu, že kód je zabalen v \begin{code}a \end{code}. Viz zde: http://www.haskell.org/haskellwiki/Literate_programming . Existuje pravděpodobně gramotní programovací nástroje pro další jazyky.

Odpovězeno 28/01/2010 v 20:59
zdroj uživatelem

hlasů
2

Já bych zkopírovat Knuth. Málokdo ví, jak lépe komunikovat než ho v prostředí počítačové vědy.

Odpovězeno 28/01/2010 v 21:00
zdroj uživatelem

hlasů
-1

APL ? Jediným problémem je, že jen málo lidí si ji přečíst.

Odpovězeno 28/01/2010 v 21:00
zdroj uživatelem

hlasů
8

Nedělejte to. Jste se odchylují od toho, co lidé očekávají, že když četl noviny o algoritmech. Ty by měly následovat očekávaných postupů; vaše nápady mají větší šanci získat pozornost, kterou si zaslouží. Když jste v Římě, chovejte se jako Římané dělat.

Formátování kódu (nebo pseudocode, jak to může být) v LaTeXed papíru je velmi snadné. Viz například formátování kódu v LaTeXu .

Odpovězeno 28/01/2010 v 21:03
zdroj uživatelem

hlasů
1

Lisp začínal jako matematický zápis modelu výpočetního takže lektor bude mít lepší nástroje než Turingovy stroje. Náhodou, se ukazuje, že to může být realizován v sestavě - tedy Lisp programovací jazyk se narodil.

Ale já si nemyslím, že je to opravdu to, co hledáte, protože výpočetní model, který popisuje LISP nemá smyčky: rekurze je používán místo toho. Syntaxe je odvozena z algebry, kde závorky označují evaluate tuto-a-náhražku-the-výsledek. Ve skutečnosti, model LISP je práce na počítači je v podstatě nahrazení - co algebra v podstatě je.

Ve skutečnosti, nejvíce funkční jazyky jako Lisp, Haskell a Erlang jsou odvozeny z matematiky. Haskell je vlastně výsledek dokazuje, že lambda kalkulu lze použít k implementaci systémů typu. Takže Haskell, jako Lisp se zrodila z čisté matematiky. Ale opět, syntaxe není to, co by pravděpodobně zvyklí.

Určitě můžete vysvětlit Lisp a Haskell syntax matematiků a oni by se brát to jako „hra“. Jazykové konstrukty, jako jsou cykly, rekurze a conditionals lze dokázat z pravidel hry, spíše než slepě implementována podobně jako v jiných jazycích. To by vás zavede do říše combinatronics, další odvětví matematiky. Opravdu, v combinatronics i koncept čísel může být budováno ven z pravidel hry spíše než nativní součástí jazyka (google Church číslicemi).

Takže se podívat na Lisp / schématu, Erlang a Haskell, pokud chcete. Erlang má zejména syntaxe blíží tomu, co chcete:

add(a,b) -> a + b

Ale moje doporučení je napsat v C-like pseudokódu. Je to něco nejmenšího společného jmenovatele v programovacích jazycích. Má syntaxi, která je poměrně snadno pochopitelné a čisté. A syntaxe funkce dokonce pochází z funkcí v matematice. Pamatovat f(x)?

Jako plus, matematici jsou používány k psaní C, statistici jsou používány k psaní C (ačkoli obecně dávají přednost R), fyzici se používají pro psaní C programátoři jsou používány alespoň při pohledu na C (Znám několik lidí, kteří nikdy dotkl C).

Ve skutečnosti, že poškrábání. Zmínil jste, že vaše cílová skupina jsou statistici. Zápis do R

Odpovězeno 28/01/2010 v 21:47
zdroj uživatelem

hlasů
7

I zjistit, zda-výrazy v matematickém zápisu poměrně často. Obvyklá věc pro smyčku je vztah opakování , nebo ekvivalentně, funkce definovaná rekurzivně.

Zde je návod, jak Ackermann funkce je definována na Wikipedii, například:

A (m, n) = n + 1, jestliže m = 0;  A (m-1, 1) je-li m> 0 a n = 0;  a A (m-1, A (m, n-1)), v případě, m> 0, a n> 0.

Tento obrázek je příjemné, protože to je matematická chuti a přesto by jej jasně psát téměř přesně tak, jak a mít realizaci. Ne vždy je možné dosáhnout.

Jiné matematické zápisy, které odpovídají smyčkách patří å-zápis pro sčítání a set-stavitel notace .

Doufám, že toto odpovědělo na tvou otázku! Ale pokud je vaším cílem je popsat, jak se něco udělat a mít někoho pochopit, myslím, že to je asi chyba předpokládat, že matematici by raději vidět rovnice. Nemyslím si, že jsou vyměnitelné nástroje (přes Turing ekvivalence). Pokud váš algoritmus zahrnuje měnitelné datové struktury, procedurálního kódu se pravděpodobně bude lepší než rovnice pro to vysvětlit.

Odpovězeno 29/01/2010 v 00:21
zdroj uživatelem

hlasů
2

Symbol pro obecné smyčky neexistuje; Obvykle budete používat operátor sumační . „kdyby“ je reprezentován používat důsledky , a na „přidat tice do seznamu“ byste použili unii .

Nicméně , obecně trochu výřečnosti není nutně špatná věc - někdy, a to zejména pro složité algoritmy, to je nejlepší to hláskovat v jednoduché angličtině, s použitím příkladů a diagramů. To je dvojnásob-pravdivý pro non-programátory.

Přemýšlejte o tom: když budete číst matematický text-knihy na Eukleidova algoritmu pro GCD, případně síto Eratosthenes, jak je psáno? Obvykle je algoritmus sám o sobě je v próze, zatímco důkaz algoritmu je místo, kde matematické symboly ležet.

Odpovězeno 29/01/2010 v 02:00
zdroj uživatelem

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