Cvičenia 9 -- plánovanie
Každý príklad môžete riešiť buď v DLV alebo DLV-K, podľa toho, čo sa Vám zdá vhodnejšie.
Autobusy
Vyriešte úlohu z predchádzajúceho cvičenia (ten dlhší vstup), riešenie by
malo ale byť reprezentované iba akciou take(Line,From,To)
,
pričom nájdete najkratšiu cestu. Vzorový príklad by mal mať teda
riešenie (s celkovou dĺžkou 7):
take(93,dvory,zochova)
take(39,zochova,"chatam sofer")
Posledné
číslo v predikáte bus
udáva, koľko trvá cesta v minútach. Môžete predpokladať,
že na prípoj nikdy netreba čakať ;)
V DLV sa dajú použiť weak constraints. V DLV-K sa akciám dá priradiť cena (cost).
Convert
Predikát converts(program,vstupny_typ,vystupnu_typ,commandline)
hovori akým programom vieme konvertovať medzi sebou aké typy
súborov. Úlohou je nájsť postupnosť konverzií z nejakého typu na
nejaký. Výstupom by mala byť postupnosť príkazov, ktoré treba vykonať.
Ako príklad zistite, ako z text/x-latex
vyrobiť
image/png
.
Príklad vstupu:
types_data.smfrom("text/x-latex"). to("image/png"). % prog(prog_id) % converts(prog_id, type1, type2, command) % command: $f from file $t to file prog(latex). prog(pdflatex). prog(dvips). prog(ps2pdf). prog(pdf2ps). prog(imageMagick). converts( latex, "text/x-latex", "application/x-dvi", "latex $f" ). converts( pdflatex, "text/x-latex", "application/pdf", "pdflatex $f" ). converts( dvips, "application/x-dvi", "application/postscript", "dvips -o $t $f" ). converts( ps2pdf, "application/postscript", "application/pdf", "ps2pdf $f $t" ). converts( pdf2ps, "application/pdf", "application/postscript", "pdf2ps $f $t" ). converts( imageMagick, "image/eps", "image/jpeg", "convert $f $t" ). % enumeration of input/output types type( IT ) :- converts( P, IT, OT, C ). type( OT ) :- converts( P, IT, OT, C ). % ImageMagick % this crates a _LOT_ of cycles :) prog(imageMagick). tmpImageMagicFormat( "image/jpeg" ). tmpImageMagicFormat("image/png" ). tmpImageMagicFormat( "image/eps" ). tmpImageMagicFormat( "application/postscript" ). converts( imageMagick, F1, F2, "convert $f $t" ):- tmpImageMagicFormat( F1 ), tmpImageMagicFormat( F2 ).