מבחן בתכנות לוגי (פרולוג) ד"ר נועם חזון סמסטר ב' ,מועד א' ,תשע"ד זמן הבחינה 150 :דקות מותר להשתמש רק בדפי הנוסחאות המצורפים נא לכתוב בכתב ברור שאלה 1 כתבו את הפרדיקט findFirst/4שמקבל רשימה ו 2 -ביטויים ,ומחזיר את האינדקס של המקום הראשון ברשימה בו מופיעים 2הביטויים אחד אחרי השני .במידה ולא קיים מקום כזה ברשימה יש להחזיר .false האינדקסים ברשימה מתחילים מאפס .יש לכתוב רקורסיית זנב .דוגמת ריצה: ?- findFirst([a,3,4,7,d,3,7,3,7],3,7,X). X = 5. ?- findFirst([a,a,b,b,a,a,b,a],a,a,X). X= 0. ?- findFirst([3,4,5,6,7],3,6,X). false. שאלה 2 כתבו את הפרדיקט countNums/2שמקבל ביטוי מורכב ( )complex termומחזיר את מספר הפעמים שמופיע מספר כלשהו כארגומנט של הביטוי המורכב .דוגמת ריצה: ?- countNums(term(1,4,t,y,6),R). R = 3. ?- countNums(mia(a,t,l,a,s,t),R). R = 0. שאלה 3 א .מה תהיה התשובה של פרולוג לשאילתא: ?- atom_codes(X,[p,u,l,p,f,i,c,t,i,o,n]). ב .מה תהיה התשובה של פרולוג לשאילתא: ?- findall(1,(*(7,(3+2)) == 7*(+(3,2))),L). ג .נתונה התוכנית הבאה: many_lists([],_,[]). many_lists(LS,L2,L1):-member(L1,LS),append(_,L2,L1). )aמה תהיה התשובה הראשונה של פרולוג לשאילתא: ?- many_lists([[1,2,3,4],[4,3,2,1],[2,3,4],[3,4]],[3,4],L). )bמה תהיה התשובה השניה של פרולוג לאותה שאילתא? )cאם נשנה את התוכנית ונוסיף ! באופן הבא: many_lists([],_,[]). many_lists(LS,L2,L1):-member(L1,LS),!,append(_,L2,L1). מה תהיה התשובה השניה של פרולוג לאותה שאילתא? שאלה 4 לפניכם מאגר מידע שמתאר מספר משפחות .כל משפחה במאגר מכילה איש ,אישה ורשימה של ילדים. כל אדם במאגר מתואר ע"י שם פרטי ,שם משפחה ,תאריך לידה והעבודה שלו .הוגדרו גם פרדיקטים לגישה קלה יותר למאגר. (family person(tom,fox,date(7,may,1960),work(cnn,15200)), person(ann,fox,date(9,may,1961),unemployed), [person(pat,fox,date(5,may,1983),unemployed), person(jim,fox,date(5,may,1985),unemployed)]). (family person(nom,ros,date(30,may,1976),work(abc,16200)), person(shi,ros,date(22,july,1981),work(cbs,19000)), [person(mat,ros,date(5,aug,2005),unemployed), person(har,ros,date(5,jan,2007),unemployed), person(teh,ros,date(20,aug,2011),unemployed)]). (family person(zvi,ha,date(21,jan,1980),work(cnn,11200)), person(haya,shu,date(19,aug,1979),work(fox,15000)), [person(isi,ha,date(15,aug,1987),unemployed), person(riv,ha,date(3,jan,2011),unemployed)]). husband(X):-family(X,_,_). wife(X):-family(_,X,_). child(X):-family(_,_,Children),member(X,Children). א. ב. ג. ד. כתבו שאילתא שתחזיר את השמות הפרטיים של כל הילדים שנולדו לפני .1111יש להחזיר את כל השמות ברשימה אחת. מה תהיה תוצאת הרצת השאילתא מסעיף א' על מאגר המידע הנתון? כתבו שאילתא שתחזיר את מספר הנשים שמרוויחות פחות מ.11000 - כתבו שאילתא שתחזיר את השמות המלאים של כל הנשים שלא עובדות .יש להחזיר את כל השמות ברשימה אחת .יש להפריד בין השם הפרטי לשם המשפחה באמצעות מקף (לדוגמא, אם השם הפרטי הוא rutiושם המשפחה הוא ,leviיש לכתוב ruti-leviברשימה).
© Copyright 2024