Szevasztok!
Az lenne a kérdésem, hogy megírtam a 2. kisházit, s nálam jól is
működött, de amikor beküldtem, ezt a választ kaptam az összes
tesztesetre:
! Existence error in '$module_being_tested':domain/3
! procedure '$module_being_tested':domain/3 does not exist
! goal: '$module_being_tested':domain([_5217],1,9)
>>>>> Exception occurred.
Pedig a tesztesetet beírva magamnál a prologba, kiadta a várt
eredményeket. Hogyhogy nem ismeri a domain/3-at? Lehetséges,
hogy nincs betöltve a clpfd, lists modul?
Ha igen, hogy lehet betölteni programból?
Válaszotokat és segítségeteket előre is köszönöm!
Üdvözlettel:
Péter
Sziasztok!
Tudom, hogy jókor jut eszembe, de hánytól lesz a mai vizsga?
A Neptunban 10.00 szerepel, a honlapon pedig 8.00. Melyik az igazi?
Ha valaki az elkövetketendő fél órában vagy reggelig tudna válaszolni,
az jó lenne.
Üdv:
Laci
Újabb infók, amik a konzultáción hangzottak el.
Öt feladat lesz:
- CLPB/CLPQ/CLPR,
- Mercury porgramot kell liegészíteni módokkal és determinizmussal,
- Programozási feladat reifikációval,
- Globális korlát írása,
- Indexikálisok írása.
Egyéb tudnivalók:
- Mercuryból nem lesz magasabbrendű függvény,
- Értsük meg a típusdeklarációnál az == és a ---> közötti
különbséget,
- Vizsgán lehet használni a kinyomtatott fóliákat,
- Interaktív írásbeli vizsga lesz, mint dp-ből, opcionális szóbeli
javítással,
- A vizsga időtartama kb. 3 óra.
Peti
N> Hali
N> az jól hangzik, hogy nem annyira kötelező vizsga előtt 3 nappal leadni a
N> hf-t. én most csütörtökön még szabtechezek, úgyhogy nhlp-be csak aznap utána
N> fogok belevágni, és sajna az anyagnak is csak az első felét ismerem
N> nagyjából, úgyhogy a borotválás még nem sokat mond nekem.
N> egyébként köszi az infókat, sokat segített, legalább fogalmam van, hogy
N> tudok nekilátni az egésznek.
N> a házihoz meg gratula, bár ahogy ismerlek meg fogod próbálni 10ből 10re:)
N> üdv
N> Zsolti
Hello!
Kipróbáltam a case globális korlátot, de legnagyobb erőfeszítéseim
ellenére sem sikerült működésre bírnom. Mindig "consistecy error"
exceptiont dob.
A következő globális korlátot szeretném megvalósítani:
Adott egy 2x2-es mátrix:
block(NW, NE,
SW, SE).
Az elemek 0-tól 1-ig terjedhetnek, és ha a négy változó között vannak
1-esek, mindenképp téglalapot kell alkotniuk.
Az állapotokat hasonlóképpen neveztem el, mint ahogy a 96. oldalon a
felemasok predikátumban láttam.
A példaprogramnak végre kellene hajtania a NW#=0 szűkítést, mert a bl
felső mező biztosan nem lehet 1-es.
Köszönöm a segítséget,
Peti
casetest(B) :-
B=[block(NW,NE,SW,SE)],
domain([NW,NE,SW,SE], 0, 1),
NE#=0, SE#=1,
case(block(NW,NE,SW,SE), B,
[node([] , NW, [(0..0)-x0, (1..1)-x1]),
node(x0 , NE, [(0..0), (1..1)-x01]),
node(x1 , NE, [(0..0)-x10, (1..1)-x11]),
node(x01 , SW, [0..0]),
node(x10 , SE, [0..0]),
node(x11 , SW, [(0..0)-x110, (1..1)-x111]),
node(x110, SE, [0..0]),
node(x111, SE, [1..1])
]).
Sziasztok,
Az vetodott fel bennem, hogy a konstanstartomanyok jelolesere hasznalt
nyelvtan nem egyertelmu. (Ugyanez a helyzet Sicstus kezikonyv 34.11.1-es
szakaszaban a ConstantRange-et leiro szaballyal).
A jegyzet 50. oldala szerint:
op(500, fy, \).
op(500, yfx, /\ ).
Namost ezek szerint ha azt irom, hogy
\ KT1 /\ KT2
akkor ez az operatorok tipusa miatt lehet
\ ( KT1 /\ KT2 ), vagy ( \ KT1 ) /\ KT2
A sicstus a write_canonical tanusaga szerint az utobbi mellett dont
(termeszetesen KT[12] helyere tenylegesen egy konstanstartomanyt irva),
ami logikus is. Kiderult az is, hogy ezt a term-kifejtesnek koszonhetjuk,
ami zarojelez ugy, ahogyan azt kell.
Tovabba a term-kifejtesnek koszonheto az is, hogy irhato olyan, hogy
KT1 /\ \KT2, mert az operatorok tipusa ezt nem tenne lehetove (a \ itt
vegig a clpfd-beli, es nem a beepitett \ operator).
Hogy kerdest is tegyek fel: elneztem valamit, vagy csak nem olvastam kello
kitartassal a dokumentaciot?
Jozsi
Hello!
Írtam néhány predikátumot, ami egy mátrixnak összegyűjti az összes
2x2-es blokkját, majd ezekre felvesz egy korlátot.
Hogyan lehetne kiküszöbölni a keletkező választási pontokat? A
blokkokat gyűjtsem listába, vagy van más megoldás is?
Peti
% block2x2(M, block(NW,NE,SW,SE))
% M mátrix 2x2-es blokkjait visszaadja egy block struktúrában.
% NW=north-west, stb.
block2x2([Row1,Row2|_], B) :-
block2x2line(Row1, Row2, B).
block2x2([_,Row2|MT], B) :-
block2x2([Row2|MT], B).
block2x2line([NW,NE|_], [SW,SE|_], block(NW,NE,SW,SE)).
block2x2line([_,NE|Row1], [_,SE|Row2], Block) :-
block2x2line([NE|Row1], [SE|Row2], Block).
% blockconstraints(M)
% Létrehozza a 2x2-es blokkokra a korlátokat
blockconstraints(M) :-
block2x2(M, block(NS,NE,SW,SE)),
sum([NS,NE,SW,SE], #\=, 3).
Hello!
Megoldottam a gyakorló feladatok közül a felhőkarcolósat (4. oldal, 4.
feladat).
Az én megoldásom kicsit bővebb az emelkedő függvényhez képest: a
rejtvény egy sorára felveszi az összes szükséges korlátot.
A problémám az, hogy a rowbnd([A,B,C,D], 1, 3]) hívás semmilyen
szűkítést sem végez, csak a cimkézés szakaszában derül ki, hogy a bal
oldali épület 4 magasságú.
Kíváncsi vagyok a hivatalos megoldásra - hogyan lehetne bevetni a
tanult aritmetikai és kombinatorikus korlátokat, leegyszerűsítve és
hatékonyabbá téve a feladatot. Például a maximumszámítást elég
körülményesnek tartom három listával, és a reifikációval való
trükközéssel. Nincs olyan beépített korlát, ami segíthetne?
Peti
A forráskód:
:- use_module(library(clpfd)).
:- use_module(library(lists)).
% Felveszi a Height épülettömbre a láthatósági,
% különbözőségi és tartománykorlátokat
rowbnd(Height, VNLeft, VNRight) :-
length(Height, N),
domain(Height, 1, N),
all_distinct(Height),
heightbnd(Height, VNLeft),
reverse(Height, Height2),
heightbnd(Height2, VNRight).
% Felveszi a Height épülettömbre a baloldali láthatóságot
% definiáló korlátokat
heightbnd(Height, VisibleNum) :-
visible(Height, _MaxH, -1, Visible),
sum(Visible, #=, VisibleNum).
% visible(Height, MaxH, LastMaxH, Visible)
% MaxH[n] = max(Height[1], ... Height[n])
% LastMaxH = MaxH utolsó kitöltött eleme
% Visible[n] = 1, ha az n. épület látható, 0, ha nem
visible([], [], _, []).
visible([H|HT], [M|MT], L, [V|VT]) :-
H #> L #<=> V,
M #= V*H + (1-V)*L, % M=max(H,L)
visible(HT, MT, M, VT).
A targykovetelmenyekben
(http://www.vdk.bme.hu/targykov/valaszthato/vima9359.htm) szerepel egy
ilyen mondat:
9. Követelmények
a. A szorgalmi idõszakban: A szorgalmi idõszakban a hallgatóknak egy
nagyfeladatot kell megoldaniuk és dokumentálniuk. Az aláírás feltétele a
nagyfeladat elégséges szintû megoldása. (Elégséges szint: a maximális
pontszám 40%-a.) A vizsgára bocsátás feltétele az aláírás megszerzése.
b. A vizsgaidõszakban: A nagyfeladat megoldása a vizsgaidõszak végéig
pótolható.
Mindezt joindulatuan ertelmezve nem muszaj beadni a hazit a vizsgaig. Tehat
levizsgazhattok es utana "pótolhatjátok" hazit a vizsgaidõszak végéig.
Mas: ha van ra igeny, es termet is tudunk ra szerezni, akkor szerdan 10-tol
szivesen tartok konzultaciot a most csutortoki vizsgara.
Jelezzetek a listara, ha valakit erdekel a konzultacio.
-Peter