Skip to content

Commit bdc5950

Browse files
committed
Q5 close enough
1 parent 6b2ce12 commit bdc5950

File tree

1 file changed

+38
-1
lines changed

1 file changed

+38
-1
lines changed

assignment.ml

+38-1
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,34 @@ fun list_distinct_students (prof, C(c), E(e)) =
7373

7474
fun count_distinct_students (prof, C(c), E(e)) = length(list_distinct_students (prof, C(c), E(e))) ;
7575

76+
(*Q5*)
77+
(*remove course and enrollment by course id*)
78+
fun delete_course_enroll (course_id, C(c), E(e)) =
79+
let fun delete_course (course_id, C([]), C(c_list)) = C(c_list)
80+
| delete_course (course_id, C(h::t), C(c_list)) =
81+
if (course_id = #1 h) then delete_course (course_id, C(t), C(c_list))
82+
else delete_course (course_id, C(t), C(c_list@[h]));
83+
fun delete_enroll (course_id, E([]) , E(e_list)) = E(e_list)
84+
| delete_enroll (course_id , E(h::t), E(e_list)) =
85+
let fun student_drop (course_id, [], fin_courses) = fin_courses
86+
| student_drop (course_id, h::t, fin_courses) =
87+
if(h = course_id) then student_drop (course_id , t, fin_courses)
88+
else student_drop (course_id , t, fin_courses@[h]);
89+
val std = (# 1 h , student_drop (course_id, #2 h, []))
90+
in
91+
92+
delete_enroll (course_id, E(t), E(e_list@[std])) end;
93+
in
94+
95+
(delete_course(course_id,C(c),C([])) , delete_enroll(course_id,E(e),E([])))
96+
97+
end;
98+
99+
100+
101+
102+
103+
76104
print("....(Q1)....");
77105
insert_course ([], C [("comp10", "p01")]);
78106
insert_course ([("comp12", "p02")], C []);
@@ -100,4 +128,13 @@ count_distinct_students ("p01", C [("comp10", "p01")], E [(1701,
100128
["comp10"]), (1702, ["comp13"])]);
101129
count_distinct_students ("p01", C [("comp10", "p01"), ("comp12",
102130
"p02"), ("comp13", "p01")], E [(1701, ["comp10", "comp11"]), (1702,
103-
["comp13"])]);
131+
["comp13"])]);
132+
133+
print("....(Q5)....");
134+
delete_course_enroll ("comp10", C [], E[]);
135+
delete_course_enroll ("comp10", C [("comp10", "p01")], E []);
136+
delete_course_enroll ("comp10", C [("comp10", "p01")], E [(1701,
137+
["comp10"])]);
138+
delete_course_enroll ("comp10", C [("comp10", "p01"), ("comp12",
139+
"p02")], E [(1701, ["comp10", "comp11"]), (1702, ["comp13", "comp10"]),
140+
(1703, [])]);

0 commit comments

Comments
 (0)