I currently am faced with a problem with if-else block with end
keyword. Here is my problem method.
And here is a link to my full project.
let parkVehicle () =
try
print_string "Please enter the license plate: ";
let licensePlate = read_line () in
let index = checkExists licensePlate in
if index = -1 then
begin
print_string "Adding new ticket....\n";
let ticket = Ticket.(setId (Int64.of_float (Unix.time ())));
if addVehicle licensePlate then
begin
tickets := ticket :: !tickets;
print_string "Parking vehicle successfully....\n"
end
else
print_string "Fail to add new ticket! Try again!\n"
end
^^^^^
else
begin
print_string "Removing existing ticket....\n";
let ticket = List.nth !tickets index in
tickets := List.filter (fun t -> t <> ticket) !tickets;
if Ticket.removeVehicle ticket then
begin
let diff = Ticket.getEndTime ticket -. Ticket.getStartTime ticket in
let minutes = int_of_float (diff /. 60.0) in
Vehicle.setTotalParkingTime minutes;
print_string "Payment ticket information....\n";
print_string (Ticket.toString ticket ^ "\n")
end
else
begin
print_string "Fail to remove existing ticket! Try again!\n";
tickets := ticket :: !tickets
end
end
with _ ->
print_string "An error occurs!\n"
Your problem isn't actually with the end
, but earlier in your code:
let ticket = Ticket.(setId (Int64.of_float (Unix.time ())));
This is not valid syntax. Rather use a local binding.
let ticket = Ticket.(setId (Int64.of_float (Unix.time ()))) in
Looking at your full project briefly, it looks like you may have this issue in multiple places. It's a common beginner mistake, and a good one to learn about early.