BME Villamosmérnöki és Informatikai Kar
Műszaki informatika szak
Nappali tagozat
1999/2000. tanév, tavaszi félév

Deklaratív programozás

1. Prolog kis házi feladat, 1.2 változat

2000. március 21.

A feladat

Állítsa elő egy N nem negatív egész szám B alapú számrendszerben vett jegyeinek listáját (B > 1 egész)! Írjon egy Prolog eljárást, amely a legnagyobb helyiértékű jegyet helyezi a lista elejére, és egy másik eljárást, amely a legkisebb helyiértékű jeggyel kezdi a listát.

A segédeljárásokat feltétlenül lássa el fejkommenttel!

Törekedjék arra, hogy a megoldás hatékony legyen (az eljárások legyenek jobbrekurzívak, append-et, reverse-et ne használjon)! Vigyázzon arra is, hogy a megoldás ne sikerüljön többszörösen!

% szam(Szám, Alap, Jegyek): A Szám >= 0 szám
% Alap > 1 alapú számrendszerben balról jobbra
% vett jegyeinek listája Jegyek.
% :- pred szam(int::in, int::in, list(int)::out).

% fszam(Szám, Alap, Jegyek): A Szám >= 0 szám
% Alap > 1 alapú számrendszerben jobbról balra
% vett jegyeinek listája Jegyek.
% :- pred fszam(int::in, int::in, list(int)::out).

Példák

| ?- szam(0, 2, Jk).
Jk = [0] ? ;
no
| ?- fszam(0, 2, Jk).
Jk = [0] ? ;
no
| ?- szam(6, 2, Jk).
Jk = [1,1,0] ? ;
no
| ?- fszam(6, 2, Jk).
Jk = [0,1,1] ? ;
no
| ?- szam(1266, 100, Jk).
Jk = [12,66] ? ;
no
| ?- fszam(1266, 100, Jk).
Jk = [66,12] ? ;
no
| ?- 

Egyéb követelmények és tudnivalók

Ez az első Prolog kis házi feladat, ezért khf-pl1.pl néven kell beküldeni a megoldást. A beadási határidő 2000. március 27., hétfő, 24:00 óra.

A vizsgaosztályzat megállapításakor a határidőre beadott, helyesen megoldott kis házi feladatért plusz 1 pont jár (a 100 pontból).

A házi feladat tesztelése

A beküldött házi feladat futásáról az alábbi formában kapnak választ: Test results for __Dr_BuboBubo.3 on March 21, Tuesday, 2000, at 11:04:59. Test was done on kempelen (SunOS). Testing your homework ===================== Testing case #1 --------------- {loading /home/pp/dp/dp-shw/homeworks/00s/recent/_SzerediPeter-pl1/pl1-eval.ql...} {module dp_test imported into user} {loading /usr/local/sicstus/lib/sicstus-3.8.1/library/lists.po...} {module lists imported into dp_test} {loaded /usr/local/sicstus/lib/sicstus-3.8.1/library/lists.po in module lists, 20 msec 20440 bytes} Goal: szam(0,7,A), all solutions in A: expected [[0]], got [[0],[]]; test failed >>>>> Normal program termination: FAILURE Testing case #2 --------------- {loading /home/pp/dp/dp-shw/homeworks/00s/recent/_SzerediPeter-pl1/pl1-eval.ql...} {module dp_test imported into user} {loading /usr/local/sicstus/lib/sicstus-3.8.1/library/lists.po...} {module lists imported into dp_test} {loaded /usr/local/sicstus/lib/sicstus-3.8.1/library/lists.po in module lists, 10 msec 20440 bytes} Goal: szam(17,3,A), all solutions in A: expected [[1,2,2]], got [[1,2,2]]; test OK >>>>> Normal program termination: SUCCESS Testing case #3 --------------- {loading /home/pp/dp/dp-shw/homeworks/00s/recent/_SzerediPeter-pl1/pl1-eval.ql...} {module dp_test imported into user} {loading /usr/local/sicstus/lib/sicstus-3.8.1/library/lists.po...} {module lists imported into dp_test} {loaded /usr/local/sicstus/lib/sicstus-3.8.1/library/lists.po in module lists, 10 msec 20440 bytes} Goal: fszam(0,7,A), all solutions in A: expected [[0]] >>>>> Timed out. Testing case #4 --------------- {loading /home/pp/dp/dp-shw/homeworks/00s/recent/_SzerediPeter-pl1/pl1-eval.ql...} {module dp_test imported into user} {loading /usr/local/sicstus/lib/sicstus-3.8.1/library/lists.po...} {module lists imported into dp_test} {loaded /usr/local/sicstus/lib/sicstus-3.8.1/library/lists.po in module lists, 10 msec 20440 bytes} Goal: fszam(17,3,A), all solutions in A: expected [[2,2,1]] {EXISTENCE ERROR: seged(17,3,_2045): procedure user:seged/3 does not exist} >>>>> Exception occurred. -------------------------------------------------------------------- 1 good solutions out of 4. -------------------------------------------------------------------- Results of test cases (1: success, 0: failure, t: timeout, e: error/exception, i: internal error) 0 1 t e Itt az első futás hibás volt, mert az elvárt egy megoldás {0] mellett még egy második megoldást, a []-t is adott. A második futás sikeres, a harmadik időtúllépés miatt állt le (feltehetően végtelen ciklus), míg az utolsó egy nem-definiált eljárás meghívásakor hibára futott (kivételt dobott).

Használható beépített eljárások

A feladat megoldásához szüksége lehet a következő beépített eljárásokra (de természetesen nem kötelező ezeket használni):