Logické programovací jazyky?

nm

Logické programovací jazyky?
« kdy: 22. 07. 2015, 07:15:01 »
Existuje spousta jazyků, kde se programování točí kolem (především) číselných datových typů.

Existují jazyky, které jsou zaměřeny primárně na logiku než na čísla apod.?


gamer

Re:Logické programovací jazyky?
« Odpověď #1 kdy: 22. 07. 2015, 07:24:32 »
prolog

Re:Logické programovací jazyky?
« Odpověď #2 kdy: 22. 07. 2015, 07:47:35 »
Existují jazyky, které jsou zaměřeny primárně na logiku než na čísla apod.?
Ano. Akorát teda datové typy mají víceméně stejné, na těch až tak nesejde. Spíš je tam ta logika jako hlavní nástroj pro popis struktury algoritmu a dat. Pro programování obecných věcí se to moc neujalo, nejspíš proto, že to je takové... trochu specifické a ne úplně intuitivní, takže si s tím asi moc programátorů nechce lámat hlavu :)  V podstatě jde o to, že abys v logickém programovacím jazyku provedl nějaký výpočet o předem daných krocích, musíš mu předhodit nějaká fakta a odvozovací pravidla a svým způsobem odvozovací engine donutit, aby postupoval přesně tou cestou, kterou chceš, aby postupoval, takže je to trochu přes ruku...

Výborně se to ale hodí na problémy, kde primárně nechceš nějaký výpočet s nějakými konkrétními kroky, ale chceš se opravdu ptát, co plyne z nějakých faktů. Takže typicky nějaké znalostní databáze, na ty je to prima věc. Podle mě by k tomu aspoň trochu přičichnout měl každý programátor, čistě proto, aby věděl, že tahle se problémy dají řešit taky.

Asi nejznámější jazyk je Prolog a jeho jednodušší (a tímpádem i "předvídatelnější") varianta Datalog. Ale v podstatě je logickým programovacím jazykem i SQL (bez procedur). Jinak viz https://en.wikipedia.org/wiki/Logic_programming

gamer

Re:Logické programovací jazyky?
« Odpověď #3 kdy: 22. 07. 2015, 08:11:41 »
trochu specifické a ne úplně intuitivní, takže si s tím asi moc programátorů nechce lámat hlavu :)

Ono se hlavně cokoliv implementované v prologu zvrhne na rekurzi se seznamem, což začně být velmi brzo hrozně otravné, protože člověk nedělá nic jiného, než že rozděluje seznamy a postupně je rekurzivně zpracovává. Ale jinak nic proto prologu, je to pěkný jazyk a myslím, že každý by si v něm měl zkusit něco udělat, získá trochu jiný náhled na problém, než z imperativních jazyků.

Re:Logické programovací jazyky?
« Odpověď #4 kdy: 22. 07. 2015, 08:23:07 »
Ono se hlavně cokoliv implementované v prologu zvrhne na rekurzi se seznamem, což začně být velmi brzo hrozně otravné, protože člověk nedělá nic jiného, než že rozděluje seznamy a postupně je rekurzivně zpracovává.
To bych neviděl jako zásadní problém, to se stává i ve funkcionálním programování :) Horší je, že logické programování dává logiku :) hlavně tam, kde máš čistě deklarativní problém. Pokud začneš deklarativní programování znásilňovat k tomu, abys z něj vydupal de facto procedurální (což se v praxi u obecných problémů stane skoro vždycky), přestává ta jednoznačně deklarativní orientace jazyka dávat smysl a je to jenom vopruz...

Ale jinak nic proto prologu, je to pěkný jazyk a myslím, že každý by si v něm měl zkusit něco udělat, získá trochu jiný náhled na problém, než z imperativních jazyků.
Jj. Když už pro nic jinýho, tak je to dobrý pro to, že si člověk líp uvědomí, jak (predikátová) logika (hlavně prvního řádu) funguje. A může si vyzkoušet, že některé problémy se dají elegantně řešit převedením na zjišťování dokazatelnosti, protože to má člověk v inferenčním enginu tak nějak zadarmo ;)


Radek Miček

Re:Logické programovací jazyky?
« Odpověď #5 kdy: 22. 07. 2015, 08:47:11 »
Existují jazyky, které jsou zaměřeny primárně na logiku než na čísla apod.?

Myslíte na matematickou logiku nebo na "business" logiku - tj. nějaký produkční systém?

Aleš Hájek

Re:Logické programovací jazyky?
« Odpověď #6 kdy: 22. 07. 2015, 09:16:23 »
Ano existují. Například Prolog, nebo Godel. Nakonec i Forth. V Prologu nemusíte používat čísla, můžete si zavést vlastní pojmy jako mnoho, trochu, více než mnoho atp.

Re:Logické programovací jazyky?
« Odpověď #7 kdy: 22. 07. 2015, 09:30:19 »
Nakonec i Forth.
Co má Forth společného s logickým programováním?

Ivan

Re:Logické programovací jazyky?
« Odpověď #8 kdy: 22. 07. 2015, 12:28:12 »
Prolog, SQL. Pokud te to zajima tak doporucuju tuhle vyzivnou diskuzi na SO http://stackoverflow.com/questions/2117651/difference-between-sql-and-prolog. Krome toho, ze jsou to jazyky logicke tam jsou navic jeste deklarativni. Tzn. programator rika co se ma stat, ale uz "nemuze" rict jak se to ma stat. Zpusob vykonani pozadavku urci az optimizer za behu.

Programovani v Prologu je hodne odlisny od ostatnich jazyku, nema to promenne, nema to podminky ani cykly. Dokonce to nema ani klicova slova. V Prologu se programuje podobne jako se stavi matematicka teorie. Definuji zakladni terminy, a na jejich zaklade se definuji abstratnejsi pojmy. Navic tu nefunguje klasicke rozdeleni na kod a data.

Tenhle pristup se hodi jen pro nektere ulohy. V Prologu se da programovat i imperativne, ale vysledek vypada hrozne.
Program v Prologu muze vypadat i tak, ze obsahuje pouze slova, ktera souvisi s terminologii dane ulohy a uplne tam chybi takova ta frameworkova omacka okolo.

Radek Miček

Re:Logické programovací jazyky?
« Odpověď #9 kdy: 22. 07. 2015, 12:53:00 »
Tzn. programator rika co se ma stat, ale uz "nemuze" rict jak se to ma stat.

To je v každém vysokoúrovňovém jazyce. AFAIK deklarativnost je daná tím, jak se chovají proměnné v tom jazyce.

Citace
nema to promenne, nema to podminky ani cykly.

Proměnné to má. To bych spíš řekl, že C++ nemá proměnné. Prolog v podstatě má if-then-else a některé Prology mají i cykly.

Ivan Nový

Re:Logické programovací jazyky?
« Odpověď #10 kdy: 22. 07. 2015, 13:08:04 »
Nakonec i Forth.
Co má Forth společného s logickým programováním?
No ve Forthu je číslo slovo, takže zase jednoduše můžete čísla nahradit slovy (tedy procedurami) a pracovat se zásobníkem, i operace je slovo, tak můžete definovat například  slova pro výraz MNOHO BEZ NĚKOLIKRÁT MÉNĚ = TROCHU, když aplikujete nějakou fuzzy logiku.

win

Re:Logické programovací jazyky?
« Odpověď #11 kdy: 22. 07. 2015, 14:00:47 »
zalezi na tom co chces dosahnout.

problem s logickymi programovacimi jazyky je v tom, ze obsahuji konkretni predpoklady/modely ovlivnovani pevne zabudovane v operacich a kvantifikatorech a uz jen samotne cleneni na kvantifikatory, operace, predikaty. samotna existence predikatu predurcuje ukoncitelny model a ten sam dost zasadnim zpusobem omezuje.

Re:Logické programovací jazyky?
« Odpověď #12 kdy: 22. 07. 2015, 14:29:29 »
No ve Forthu je číslo slovo, takže zase jednoduše můžete čísla nahradit slovy (tedy procedurami) a pracovat se zásobníkem, i operace je slovo, tak můžete definovat například  slova pro výraz MNOHO BEZ NĚKOLIKRÁT MÉNĚ = TROCHU, když aplikujete nějakou fuzzy logiku.
To ale pořád nemá nic společného s logickým programováním. Logické programování je založeno na tom, že mám množinu nějaký faktů a pravidel, a dotazuju se, co za takové situace lze dokázat. Forth je AFAIK čistokrevný imperativní jazyk, tak nemaťme zbytečně pojmy (už tak dost zmatené :) ).

Jann

Re:Logické programovací jazyky?
« Odpověď #13 kdy: 22. 07. 2015, 14:42:57 »
Nakonec i Forth.
Co má Forth společného s logickým programováním?
No ve Forthu je číslo slovo, takže zase jednoduše můžete čísla nahradit slovy (tedy procedurami) a pracovat se zásobníkem, i operace je slovo, tak můžete definovat například  slova pro výraz MNOHO BEZ NĚKOLIKRÁT MÉNĚ = TROCHU, když aplikujete nějakou fuzzy logiku.

Není. Slovo je objekt ve slovníku, číslo je číslo. Jinou věcí je, že Forth nikomu nebrání definovat si třeba slovo 42, které se bude chovat jako číslo 666 a ještě přitom vypíše na obrazovku Dude (bude spárováno s načteným řetězcem prioritně, protože nejdřív se prohledává slovník a pak teprve se překladač pokouší řetězec interpretovat jako číslo).

Forth je ryze procedurální jazyk a jeho souvislost s logickým programováním mi taky není moc jasná.

Ivan Nový

Re:Logické programovací jazyky?
« Odpověď #14 kdy: 22. 07. 2015, 15:10:04 »
Ad Mirek Prýmek a Jahn. No a proto tam bylo před Forth slovo nakonec (čti s přimhouřením očí). Tomu kdo pokládal otázku vadily i čísla a Fort a kterýkoliv jiný procedurální jazyk, nejen logické programování, lze využít tak, že žádná čísla nepoužijete. Ve Forthu díky jeho konstrukci je to to o kapánek přímočařejší, protože si můžete de facto předefinovat i "klíčová slova". Proto jsem ho uvedl, třeba autor dotazu spíše potřebuje toto, než sensu stricto logické programování.