Hlavní navigace

Zmatení (programovacích) jazyků

Kategoriální gramatika a sémantika

Ještě před objevením frázových gramatik se jazyky popisovaly gramatikou kategoriální (KG), kterou v současné podobě vypracoval začátkem 50. let minulého století Yehoshua Bar-Hillel. Co do generativní síly je základní KG ekvivalentní bezkontextovým gramatikám. Výhoda KG spočívá v její jednoduché rozšiřitelnosti o sémantickou komponentu (což jde sice u bezkontextových gramatik také, ale ne tak elegantně)…
7. 10. 2013 0:47 |

Ztraceno v překladu

Nikdo jistě nepochybuje o tom, že kompilace je proces na všech úrovních velmi komplikovaný. A v praxi téměř vždy ztrátový. Pokud například překládám kód v C# do Javascriptu, „int x“ a „string x“ se přeloží do „var x“, čímž se ztrácí informace o typu. Při překladu do strojového kódu se samozřejmě z konceptů vyšší úrovně ztratí skoro vše.
27. 9. 2013 17:01

Ontologická promiskuita

Logické aspekty jazyka zkoumá věda od dob Aristotela. Rád bych zde popsal několik všeobecně používaných způsobů formalizované logické reprezentace. Příklady jsou z přirozeného jazyka, nicméně formální logika má široké použití v informatice, kromě logického programování se například používá rovnostní logika pro ověřování správnosti programů a rezoluční kalkulus pro kontrolu hardwarových návrhů.
15. 9. 2013 0:53 (aktualizováno) | |

Databáze a C++: najdete řešení?

Článek k zamyšlení pro ty, kdo opravdu dobře znají C++. Nejprve si přečtěte toto: Native Queries for Persistent Objects Málokoho asi překvapí, že objektová databáze včetně nativních dotazů, jak je popsána ve zmíněném článku, je implementovatelná v Javě a C# (existují také podobné projekty pro Smalltalk a další objektově-orientované jazyky). Výzvou je implementovat takovou databázi v C++. Co by měla umět?

Sémiotika formálních jazyků

Sémiotika, relativně mladý vědní obor, se většině lidí pojí (pokud tedy vůbec s něčím) se jménem Umberta Eca. V 70. letech 20. století se vědci pokusili aplikovat principy sémiotiky i na programovací jazyky. Jedním z prvních byl Heinz Zemanek. Sémiotika rozděluje aspekty (formálních, tedy i programovacích) jazyků na syntaktiku, sémantiku a pragmatiku. Syntaktika popisuje vztahy mezi znaky navzájem, sémantika vztahy mezi znaky a jejich významem a pragmatika vztahy mezi znaky a interpretantem.
10. 9. 2013 12:08 |

Xamarin na iOS

V souvislosti se sérií článků o vývoji mobilních aplikací v Xamarinu zde na Rootu bych rád upozornil na nesmyslné tvrzení o správě paměti v iOS. K diskusi o tom, odkdy má ObjC počítání referencí a autorelease pool, se nebudu vracet, k vygooglování této informace není zapotřebí zvláštní inteligence, stačí umět číst.
29. 8. 2013 12:56 |

Logické programování v C

Předpokládám u čtenáře alespoň minimální znalost Prologu. Jak bychom mohli v C snadno implementovat princip logického programování (tedy zejména deklarativitu, nedeterminismus a unifikaci)? Mějme následující strukturu, která reprezentuje „prologovské“ proměnné (má-li str hodnotu NULL, považujeme proměnnou za volnou).
17. 8. 2013 23:11 | |

Turingovsky úplná bezkontextová gramatika

Sofistikovaná syntaktická analýza si často nevystačí s prostou bezkontextovou gramatikou, proto vznikla její různá rozšíření. Jedním opravdu zajímavým je použití feature logic (FL) doplňující reprezentace v podobě syntaktických stromů. FL pracuje s termy. Každý term je buď konstanta nebo má tvar ft, kde f je (unární) funkční symbol a t term. Atomické formule mají tvar s≈t, kde s a t jsou termy. Formule se skládají rekurzivně pomocí běžných logických spojek (vystačíme s negací a disjunkcí).
14. 8. 2013 10:45 (aktualizováno) | |

Unifikace, AC-unifikace, E-unifikace...

Unifikace nám dnes připadá samozřejmá, byla však v rámci logiky objevena teprve v roce 1965 Johnem Alanem Robinsonem a původně sloužila pouze ke strojovému dokazování tvrzení. J.A.Robinson popsal první (nepříliš efektivní) algoritmus syntaktické unifikace, jejž sám používal pro vytváření instancí termů v predikátové logice (viz předchozí příspěvek o rezoluci).
7. 8. 2013 22:22 | |

Rezoluce aneb předstupeň logického programování

Logické programování (Prolog a spol.) je v mnohém revoluční a přinejmenším poskytuje jiný úhel problému na řešený problém. Málokdo ví, jak se tzv. logické programování vlastně vyvinulo. Prvopočátkem bylo tzv. automatické dokazování tvrzení (anglicky Automated Theorem Proving – ATM, někdy také Mechanical Theorem Proving). Bývá často považováno za součást umělé inteligence, nicméně spadá pod formální logiku. Vše začalo v roce 1965, kdy John Alan Robinson objevil rezoluci…
6. 8. 2013 18:57 (aktualizováno) | |