Čt

Thue ( / ˈt uːeɪ / ) je esoterický programovací jazyk vyvinutý Johnem Colagoyouna začátku roku 2000. Je to metajazyk, který v Chomského hierarchii vykazuje nulový typ , tedy neomezenou gramatiku . Thue vám umožňuje definovat jakýkoli jazyk a je Turing kompletní.

Autor to popisuje takto: „Thue je nejjednodušší ukázka programování s omezeními . Díky tomuto paradigmatu je jazyk podobný jazykům URISC imperativního paradigmatu. Jinými slovy, je to Turingova bažina ."

Pravidla

Program Thue se skládá z tabulky pravidel a počátečního stavu. Tabulka pravidel se skládá z jednoduchých definic formuláře

A  ::= B

A a B se mohou skládat jak z jednotlivých písmen a symbolů, tak z jejich skupin. Může existovat mnoho pravidel se stejným A a různým B . Tabulka pravidel končí prázdným pravidlem:

::=

Počáteční stav je řetězec znaků zapsaných za tabulkou pravidel.

Úkolem programu je najít původní (levé) znaky a nahradit je pravými v souladu s pravidlem.

Úloha končí, když na řetězec nelze použít žádná pravidla.

Program Thue je tedy podobný Turingovu stroji: existuje páska symbolů a existuje soubor pravidel, kterými jsou nahrazeny.

Neurčitost

Jedním z klíčových rysů jazyka je nedeterministické pořadí výběru.

Pokud je v řetězci několik znaků, na které lze pravidlo použít, bude aplikováno na náhodně vybraný znak.

Pokud je pro stejný znak definováno více pravidel, použije se náhodně vybrané pravidlo.

I/O

Pro implementaci vstupu a výstupu má jazyk speciální formu pravidel. Vlnovka se používá k zobrazení znaků:

A ::=~řetězec znaků

Toto pravidlo odstraní A z řetězce a vypíše všechny znaky za vlnovkou.

Chcete-li zadat tři dvojtečky:

A ::=:::

Toto pravidlo nahradí A řetězcem přečteným ze vstupu.

Příklady programů

Ahoj světe! ve čtvrtek:

a::=~Ahoj světe! ::= A

V jazyce neexistují žádné proměnné jako pojmy. Proto je pro jakékoli výpočty nutné nastavit odpovídající systémy pravidel. Následující program ukazuje, jak zvýšit binární číslo (přírůstek o jednu). Číslo je napsáno symbolicky a po okrajích je označeno podtržítkem:

1_::=1++ 0_::=1 01++::=10 11++::=1++0 _0::=_ _1++::=10 ::= _1111111111_

Determinismus je poskytován přítomností pouze jednoho pravidla a pouze jednoho symbolu, na který může být aplikován v kterémkoli konkrétním okamžiku.

Následující program demonstruje implementaci smyček a nedeterminismus pravidel:

b::=~0 b::=~1 xx::=xbx ::= xbx

Tento program vytváří nekonečný řetězec jedniček a nul. Cyklicita je zajištěna následovně: po každém výstupu je znak b odstraněn z řetězce xbx, zbývající znaky xx jsou nahrazeny xbx, čímž se reprodukuje počáteční stav. Je tedy možné vytvářet ohraničené smyčky, jejichž počet iterací je dán počtem určitých znaků nebo sad znaků v řetězci:

_x::=i_ i::=~testuji! ::= _xxxxx

Tento program vytiskne test řetězce 5krát. Všimněte si, že pořadí, ve kterém jsou i a _x nahrazeny, není definováno. To znamená, že během provádění může program okamžitě zpracovat i, jak se objeví, a vybrat všechna x z řetězce najednou.

Viz také

Odkazy