Add comments for Undo, get_instr

This commit is contained in:
augustin64 2024-05-20 14:51:40 +02:00
parent b17a1c3662
commit e6680b181c
2 changed files with 10 additions and 5 deletions

View File

@ -14,6 +14,7 @@ type hlam = (* hollow lam *)
| Hole
(* avec assoc la liste d'associations anciennes ref -> nouvelles ref, remplacer toutes les ref *)
let clean_hlam assoc (h : hlam) : hlam =
let rec clean (h : hlam) : hlam= match h with
HFun ((s, t), h) -> HFun ((s, t), clean h)

14
main.ml
View File

@ -44,7 +44,9 @@ let rec beta_reduce (l : Lam.lam) =
| None -> l
| Some l' -> beta_reduce l'
(* copier l'entièreté de l'état d'une preuve avec de nouvelles références pour le Undo *)
let clean_state ((s, p) : interactive_state) =
(* assoc fait le lien entre les anciennes et nouvelles ref, doit être commun au terme et aux différents composants de la preuve *)
let assoc, new_p = clean_proof p in
match s with
| None -> None, new_p
@ -114,19 +116,19 @@ let rec interactive (get_instr : unit -> instr) (sl : (interactive_state) list)
| s::sq -> s, sq
in
begin
let _ = match g with
let _ = match g with (* affichage de l'état de la preuve *)
None -> print_string "\n\027[1mNo more goals.\027[0m\n"
| Some g' -> print_newline (); print_goal g'
in
try
match get_instr () with
match get_instr () with (* get_instr récupère l'instruction suivante depuis un fichier ou stdin (garde en buffer les lignes doubles notamment) *)
Cmd c ->
begin match c with
Goal ty ->
let rh = Ref (ref Hole) in
[Some (rh, ty), (Some (rh, ty, []), [])] |> interactive get_instr
| Undo -> interactive get_instr sq
| Undo -> interactive get_instr sq (* pour Undo, on appelle juste interactive en supprimant le dernier état *)
| Qed -> begin match cg with
None ->
print_error "No current goal" "";
@ -163,6 +165,8 @@ let rec interactive (get_instr : unit -> instr) (sl : (interactive_state) list)
end
end
| Tact t ->
(* on applique la tactique et on copie l'état actuel de la preuve pour un futur Undo
Comme OCaml évalue de la droite vers la gauche, on fait bien la copie avant de modifier les références dans la preuve *)
(cg, (apply_tactic (g, gs) t))::(clean_state (cg, (g, gs)))::sq |> interactive get_instr
with
Parser.Error ->
@ -214,7 +218,7 @@ let recupere_entree () =
else Simple begin
let cmd_buff = ref [] in
if !nom_fichier = "" then
(
((* récupérer les commandes depuis stdin, les lignes vides sont considérées comme des erreurs *)
fun () ->
match !cmd_buff with
| [] ->
@ -227,7 +231,7 @@ let recupere_entree () =
| e::q -> cmd_buff := q; e
)
else
(
((* récupérer les commandes depuis un fichier *)
fun () ->
match !cmd_buff with
| [] ->