PROLOG Nevítě někdo, co jsou to funkcionální seznamy z FLP? Google mlčí.
Prolog Jakto, ze je zde nespravne pouziti operatoru rezu? Pokud by tam nebyly, tak bych dospel ke stejnemu vysledku ne? Diky num_of_parents(adam, 0) :- !. num_of_parents(eve, 0) :- !. num_of_parents(X, 2). (?- num_of_parents(eve, 2). bude yes - nesprávné)
Nespravne pouzitie natom je to, ze sa pomocou ! snazis zastavit vyhodnocovanie dalsich pravidiel po klauzule, ktoru neslo unifikovat. Spravne by sa mal pouzit nejako takto: num_of_parents(adam, 0) :- !. num_of_parents(adam, _) :- !, false. num_of_parents(eve, 0) :- !. num_of_parents(eve, _) :- !, false. num_of_parents(_, 2).
Diky :-)
IZU PROLOG Zdravim, nemate nekdo nejaky navod, tipy nebo nejake podklady k tomu, jak se poradne naucit a pochopit PROLOG?
Musíš se znovuzrodit ve vyšší dimenzi :D jinak nevim :D
cvičit a cvičit :D
na fitusce byla kopa vyresenych prikladu tusim.. z tama se to dalo naucit pomerne pekne, navic co si pamatuju, tak priklady byly na pisemce podobne tem na fitusce
Zahodit imperativní myšlení a přejít do dimenze zvané deklarativní magie
FLP Prolog Ako na tú hodnost matice?
FLP prolog Zdravím, mohl by prosím někdo rozepsat detailněji ten kód pro nalezení palindromů z řádného termínu? Jak na to přijít a tak. Když si vrátím výsledek pro provedení len, tak je to velké pole polí a pak pal z ničeho nic udělá ten výsledek, přitom dělá jen reverse, nějak to nechápu :D... Díky :)
PROLOG nepředpokládám že jste tu někdo náhle vzplanuli láskou k PROLOGu, ale třeba někdo bude vědět :) 1) jak zapíši non-existenci? příklad, jak bych si to představoval: "petr byl hasič, petr byl učitel, petr nebyl horník" clovek(petr). zamestnani(hasic). zamestnani(ucitel). zamestnani(hornik). minule_zamestnani(A, B) :- clovek(A), zamestnani(B). minule_zamestnani(petr, hasic) minule_zamestnani(petr, ucitel) minule_zamestnani(petr, B), B!=hornik. 2) jak zapíši unikátnost? příklad jak bych si to představoval: "petr a karel pili panáky zelené a rumu. Když někdo nějaký vypil, ten druhý už ho mít nemohl." piti(rum). piti(zelena). pijan(petr). pijan(karel). vypil( zapsani unikatnosti). vypil(A, B). vrací "(petr - rum A karel zelena) NEBO ( petr-zelena A karel-rum)" --- díky
zkousel si to davat do googlu vubec? nevim jakou s tim mas zkusenost, ale ja tam vzdycky najdu zajimavy veci.. http://stackoverflow.com/questions/29582415/how-to-check-non-existence-in-prolog
Zobrazit všechny odpovědi (5)
Jo, než jsem se zeptal, už jsem to na něm hodinu hledal. Zatím pro mě nejpoužitelnější článek o negacích je zde: https://www.cpp.edu/~jrfisher/www/prolog_tutorial/2_5.html Zkusím ještě jinak formulovat dotaz: Mám věc A a věc B. ty mohou být v řadě na pozicích 1-10. Jak zapsat, že A je vlevo od B? --- původně jsem to chtěl zapsat pomocí negace - že když je A nějaké, tak B nesmí být menší nebo rovno ...
mozna se priste ptej spis na vec, kterou chces konkretne vyresit, at neresime neco jinyho :) A je vlevo od B bych resil takhle - seznam typicky traverzujes po dvojicich [head, zbytek seznamu] - proto bych rekl, ze A je pred B jen kdyz plati predikat p1, ktery rika ze v seznamu existuje takova dvojice, kde je head = A a zbytek seznamu (rekneme promenna C) je neprazdnej - a zaroven s tim musi platit predikat p2, ktery rika, ze v seznamu C existuje takova dvojice [head, zbytek seznamu], kde head = B.
Neviem ci som presne pochopil tvoje poziadavky, ale ja nejak nevidim problem to implementovat na 4 riadky http://pastebin.com/3QWvitkz
Marek Milkovič nevim jak presne funguje v prologu operace [X,Y|_], ale zda se mi, ze resis jen podpripad, kdy ma byt A a hned nasledne po nem (na dalsim indexu) B...
Ja som to chapal ako bezprostredny prvok vlavo. V tom pripade staci mala uprava http://pastebin.com/sheuVcHM a backtracking vrati vsetko potrebne.
PROLOG Trenuje nekdo na zitra ? :D
Rozman říkal, že není tak naivní, že by se to někdo doma zkoušel :D :D
Heh :D Ja jen, ze mi to nefunguje vubec :D a docela potrebuju ty body :D
PROLOG Jak vyberu nty prvek z listu?
nty(1,[_|L],L). nty(P,[H|L],[H|N]) :- A is P - 1, nty(A,L,N).
Mot Loukaf: ten tvůj kod maže n-tý prvek. Takhle to vrátí n-tý: nty(1,[H|_],H). nty(P,[_|L],N) :- A is P - 1, nty(A,L,N).
IZU PROLOG Neviem či poznáte tento tríček ale pomocou príkazu "make." sa reloadne načítaný súbor v SWI-Prolog. Kiež by mi to niekto povedal na začiatku :D
IZU LISP Prolog Upozornění - učíte-li se příklady ze souborů IZU_LISP.pdf a IZU_Prolog.pdf, ujistěte se, že kód opravdu funguje, dle zkušeností ze cvičení jsou mezi nimi případy, kdy to neposkytuje žádný/požadovaný výsledek. A pro účely semestrálky eliminujte pokud možno funkce jako je append atp.
Dá sa niekde zistiť ktoré funkcie sú zakázané?
Roman Jaška: Nedá, ale platí to tak, že jsou zakázány všechny vestavěné, kromě těch uvedených na cvičení, zdroj: Rozman.
Ale když si rozkliknu cviko z lispu na wiki, tak např. append tam je jako uvedený příklad :)
Pavel Hřebíček: No, na cvičení mi ho moc nebral, ale ok, neber(te) to, co jsem napsal jako dogma, ale jako radu/doporučení. :)
Chapu, ze tam raději asi uvidí "vlastní funkce" než věstavěné, ale na druhou stranu, když to nebude explicitně zadáno v zadání(což pokuď si dobře pamatuji tak nebylo), tak přeci co není zakázáno je povoleno ne? :) S tímto by se dalo argumentovat snad ne? :)
no nevim, jak by treba reagoval na prunik tri mnozin s vestavenymi funkcemi :D (defun pruniktri (L1 L2 L3) (intersection (intersection L1 L2) L3) )
Tak to ti řeknu přesně, nulovým bodovým ziskem :D
Pavel Hřebíček: Argumentaci jsem zkoušel úplatnit u půlsemestrálky, slušnou, podloženou, neúspěšně - takže jsem k tomu poměrně skeptický; je možné, že to půjde, ale osobně bych to neriskoval. :-)
Nenapadá někoho jak třeba napsat atom?
tak, kto sa teda odhodlá celé tie súbory lisp.pdf a prolog.pdf prerobiť do korektnej podoby ? :D príjmam prihlášky :D
Filip Dolák: Atom je základní funkce, pro více základních funkcí navštivte prosím oporu.
@Paťo zdielany na kody?
Dan Dušek btw nepamatujes si, co ti presne z tech pdf dokumentu za funkci nejelo?
Ale já někde slyšel že atom neuznává. Takže jste si jistý že když ho použiji budu v pohodě?
Nejsem si jistý a nebudu Ti dávat žádné jistoty. Máte-li ještě zájem o seznam prověřených kódů, nabízím pět prověřených za opravu kódu, který spočítá atomické prvky v listu (LISP), viz.: http://pastebin.com/dV6K6AgM
ta funkce pocita dobre ale nemas dobre definovany seznam ..zkus si dat jen (print '(0 1 '(1 2) 0 '(1 2)))...vypise to (0 1 '(1 2) 0 '(1 2)) coz neni seznam mel bys tam mit neco takoveho (print (list '0 '(1 2) '(0 1))) kde ti to vypise strukturu seznamu: (0 (1 2) (0 1)) proste kdyz pouzivas ' tak musis uzavorkovat vsechny co maj tvorit vnitrni seznam....takhle to pocita spravne http://www.tutorialspoint.com/lisp/lisp_lists.htm tady plno zpusobu je jak definovat seznam tak jak jsi to psal ty to LISP nejspis neprelouska
IZU Prolog - "Atomický prvok" je všetko kde predikát Atomic() dá true, áno? Teda aj prázdny zoznam []?
Míša, like je súhlas? :D
myslim ze hej :D
len také malé upozornenie, je síce atomický, ale nie je atom http://www.swi-prolog.org/pldoc/man?predicate=atomic/1
Michal, čiže keby chcú "Počet atomických prvků" tak rátam aj prázdne zoznamy, resp. používam Atomic ale keby chcú "Počet atomů", tak prázdne polia nerátam, teda použijem Atom?
pozrel som teraz na net a vyzerá, že je to asi vec swipl implementácie a nie prologu všeobecne (Wikipédia tvrdí, že [ ] JE atom), asi by som teda použil atomic vždy