BME Villamosmérnöki és Informatikai Kar
Muszaki informatika szak |
Nappali tagozat
2003/2004. tanév, tavaszi félév
|
A kis házi feladat beadása nem kötelező.
f(empty(1),node([1,2,4],empty,1-A),1-2,alma)
struktúra.
Az átalakítás lényege, hogy bizonyos zárt, változókat nem tartalmazó listákat
becsomagolunk, amennyiben azok megfelelnek egy előzetesen megadott
kritériumnak. Például, amennyiben az [1,2,3]
lista jó
lista, akkor az f(a,3,[1,2,3],3+1)
kifejezés
átalakítottja az f(a,3,jo([1,2,3]),3+1)
kifejezés. A
becsomagolandó listák tetszőleges mélységben fordulhatnak elő. Egy,
már becsomagolt kifejezés belsejében nem kell újabb részkifejezést becsomagolni.
Egy változókat nem tartalmazó lista akkor jó, ha egy előre
megadott részlegesen paraméterezett eljárás igaz minden elemére. Ez utóbbit, a
konvenciónak megfelelően úgy értjük, hogy a listaelemmel, mint utolsó paraméterrel
paraméterezzük fel a megadott részlegesen paraméterezett eljárásunkat
(lásd előadásfóliák, call eljárás, II. rész 119-122. oldal). Amennyiben a listaelem például
az 5
szám, és a megadott eljárás (nulla aritású) a pozitiv
,
akkor a pozitiv(5)
hívás sikerességét vizsgáljuk. Amennyiben a megadott eljárás a
nagyobb(3)
, akkor a nagyobb(3,5)
célsorozatot
hívjuk meg. Feltehetjük, hogy a megadott eljárások sosem jeleznek
hibát: vagy sikerülnek vagy meghiúsulnak.
Amennyiben egy lista változó(ka)t tartalmaz, akkor a kimenő
kifejezésben változatlan formában kell megadnunk azt. Ugyanez igaz
üres listák esetén is.
szuro/3
Prolog
meta eljárást, amely az első argumentumában megadott kifejezést átalakít a
második argumentumában megadott szűrőpredikátumnak megfelelően. Az
eredményt a harmadik argumentumban adja vissza.
Az elvárt eljárás fejkommentje:
% szuro(+Kif,:Szuro,-Ujkif): UjKif előáll Kif-ből Szuro felhasználásávalTegyük fel, hogy például az alábbi eljárások definiáltak (a teszteléshez egészen másokat is használhatunk):
pozitiv(A):- number(A), A>0. nagyobbmintegy(A):- number(A), A>1. nagyobb(A,B):- B@>A. paratlan(A):- number(A), 1 is A mod 2.
| ?- szuro([],pozitiv,E). E = [] ? ; no | ?- szuro([1,2,3,4],pozitiv,E). E = jo([1,2,3,4]) ? ; no | ?- szuro([1,2,3,4],nagyobbmintegy,E). E = [1,2,3,4] ? ; no | ?- szuro(f(a,B,[1,2,3,4]),pozitiv,E). E = f(a,B,jo([1,2,3,4])) ? ; no | ?- szuro(f(a,B,[3,f(1,[3,3]),4]),nagyobb(2),E). % már becsomagolt belsejében nem csomagolunk, listaelem nem csak szám lehet E = f(a,B,jo([3,f(1,[3,3]),4])) ? ; no | ?- szuro(g(f(a,B,[1,1,1]),t([1|_],[2],[1,A,1]),[1]),paratlan,E). E = g(f(a,B,jo([1,1,1])),t([1|_A],[2],[1,A,1]),jo([1])) ? ; no | ?- szuro([1,2,3,g([1,2])],pozitiv,E). % listán belül is lehet jó lista, de ezt nem kell külön kezelni :) E = [1,2,3,g(jo([1,2]))] ? ; no | ?- szuro([1,2|_],pozitiv,E). % nyílt végű lista! E = [1,2|_A] ? ; noA programot Prolog nyelven kell elkészíteni.
khf-pl4.pl
néven kell beküldeni a
megoldást. A névben meg kell különböztetni a kis- és nagybetuket.
A programok készülhetnek MS DOS vagy MS Windows alatt is, de Linux operációs rendszer alatt is muködniük kell. A beadási határidő május 3., hétfő 24:00.
A vizsgaosztályzat megállapításakor a határidore beadott, helyesen megoldott kis házi feladatért plusz 1 pont jár (a 100 pontból).