Logické programovací jazyky?

Re:Logické programovací jazyky?
« Odpověď #15 kdy: 22. 07. 2015, 15:29:45 »
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í.
Ale tazateli přece nejde o to, jestli se nějaké symboly v jazyce dají předefinovat, nota bene tak uchylně, aby symbol "3" měl význam "5". Ptá se na to, jestli existují jazyky, které primárně nejsou určeny k manipulaci s čísly, ale s nějakými (symbolickými?) logickými fakty. A to jsou prostě logické programovací jazyky, mezi které Forth rozhodně nepatří ani náznakem.

Když už jsme u toho, možná by sem mohly spadat i jazyky, které jsou určené k nějakým jiným symbolickým operacím, třeba k nějakým úpravám matematických výrazů nebo tak něco. Určitě něco existuje, ale tady už nemůžu sloužit, nikdy jsem nic takovýho nepoužíval.


Ivan Nový

Re:Logické programovací jazyky?
« Odpověď #16 kdy: 22. 07. 2015, 15:54:55 »
Proč předefinovávat 3 na 5, to jsem nepsal, ale 3 na MÁLO už smysl má. Můžete pak počítat  MÁLO + MÁLO = MÁLO, MÁLO + MÁLO + MÁLO = HODNĚ :-)

Re:Logické programovací jazyky?
« Odpověď #17 kdy: 22. 07. 2015, 16:19:54 »
Můžete pak počítat  MÁLO + MÁLO = MÁLO, MÁLO + MÁLO + MÁLO = HODNĚ :-)
No a?

abbore

Re:Logické programovací jazyky?
« Odpověď #18 kdy: 22. 07. 2015, 16:26:47 »
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.
Nie je dolezite popisovat, ci to premenne ma alebo nema, lebo pod tym si autor otazky asi nic nepredstavi. Lepsie je povedat, ako tam tie premenne vyzeraju.
C++ a imperativne programovacie jazyky maju premenne ako miesto v pamati. Je mozne ich precitat a aj zapisat.
Prolog ma premenne ako zviazanie logickych hodnot. Vo vseobecnosti sa neda povedat, co je presne v premennej a nie je tam mozne nieco zapisat. Je mozne sa podla toho rozhodovat a tak obmedzovat mnozinu moznosti, ktore moze premenna nadobudat. To dava s unifikaciou pouzitelne programovanie.

if-then-else a aj cykly sa daju v prologu vdaka predchadzajucemu trivialne spravit, ale je to asi nadbytocne, ked mame unifikaciu.

zboj

  • *****
  • 1 507
    • Zobrazit profil
    • E-mail
Re:Logické programovací jazyky?
« Odpověď #19 kdy: 22. 07. 2015, 16:27:46 »
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.?

Již zmíněný Prolog. Dále lze mnoho problémů převést na SAT (plánování, parsing...), což je výroková logika. Syntaxí se Prologu podobá ASP (funkčně je to ale spíše SAT). Celkem dobře to je popsané na anglické Wikipedii.


BoneFlute

  • *****
  • 2 046
    • Zobrazit profil
Re:Logické programovací jazyky?
« Odpověď #20 kdy: 23. 07. 2015, 00:13:56 »
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...
A není lepší v takových případech udělat úkrok stranou, a takový imperativní výpočet vytknout do nějaké rutiny... V SQL na to jsou uložené procedury, a přijde mi ta provázanost logického a imperativního celkem fajn.

Re:Logické programovací jazyky?
« Odpověď #21 kdy: 23. 07. 2015, 00:16:27 »
A není lepší v takových případech udělat úkrok stranou, a takový imperativní výpočet vytknout do nějaké rutiny... V SQL na to jsou uložené procedury, a přijde mi ta provázanost logického a imperativního celkem fajn.
Taky si myslím, nedávno jsem přesně tohle použil: Elixir na výkonnou část, Prolog na dotazování nad daty. Akorát to někdy asi může být trochu problém technickej - interoperabilita různých jazyků nebývá procházka růžovou zahradou :)

BoneFlute

  • *****
  • 2 046
    • Zobrazit profil
Re:Logické programovací jazyky?
« Odpověď #22 kdy: 23. 07. 2015, 00:23:01 »
Taky si myslím, nedávno jsem přesně tohle použil: Elixir na výkonnou část, Prolog na dotazování nad daty. Akorát to někdy asi může být trochu problém technickej - interoperabilita různých jazyků nebývá procházka růžovou zahradou :)
Jsem někde viděl implementaci Prologu (nebo jeho části) v CL. Jak jsi to měl řešené v Elixíru?
V PostgreSQL je to naopak. Základní engine je jakože logické, a ty rutiny můžeš psát v široké paletě jazyků. Java, Python, Lua,...

Re:Logické programovací jazyky?
« Odpověď #23 kdy: 23. 07. 2015, 08:21:20 »
Jsem někde viděl implementaci Prologu (nebo jeho části) v CL. Jak jsi to měl řešené v Elixíru?
Implementací Prologu v Erlangu: https://github.com/rvirding/erlog a můj trapný wrapper pro něj: https://github.com/mprymek/exlog

Ten můj pokus, který ho využívá, je tady: https://github.com/mprymek/symconfig ale je tam zatím nahraná jenom starší verze, která toho moc neumí :)

V PostgreSQL je to naopak. Základní engine je jakože logické, a ty rutiny můžeš psát v široké paletě jazyků. Java, Python, Lua,...
Jj, vím. Ale ty SQL dotazy tam ještě taky sypeš nějakým "normálním" jazykem - Javou, PHP, ... Určitě je to praktický mít imperativní jazyk "zvenku", protože si v něm bez problémů uděláš IO apod. a to vlastní logický chroustání necháš na ten logický jazyk. Do Prologu se sice dají celkem pohodlně dávat callbacky třeba na céčko (v Prologu nepotřebuješ referenční trasparentnost apod.), ale opačně je to imho pohodlnější...

Radek Miček

Re:Logické programovací jazyky?
« Odpověď #24 kdy: 23. 07. 2015, 09:18:41 »
Ale ty SQL dotazy tam ještě taky sypeš nějakým "normálním" jazykem - Javou, PHP, ...

V SecuritEase si napsali CQL.

Re:Logické programovací jazyky?
« Odpověď #25 kdy: 23. 07. 2015, 09:25:59 »
V SecuritEase si napsali CQL.
Jo, generovat SQL z Prologu si umím představit v pohodě. Ještě lepší by to bylo z Datalogu. Mně šlo spíš o to, že Prolog je podobně deklarativní jako SQL, takže není od věci ho obalit něčím víc imperativním (popř. funkcionálním) stejně jako se to dělá s SQL.