Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- type SVM = {
- memoria: float list;
- registri: (string*float) list;
- pc: int;
- }
- //inizializazione SVM
- let SVM_test ={
- memoria=[0.0;0.0;0.0;0.0;0.0;0.0;0.0;0.0;0.0;0.0];
- //va poi scritta una funzione che inizializzi la memoria per i cento elementi
- registri=[("reg1",0.0);("reg2",0.0);("reg3",1.0);("reg4",0.0)];
- pc=1;
- }
- let (registri: (string*float) list )= SVM_test.registri;;
- let (reg1:(string*float))= List.nth registri 0;;
- let (reg2:(string*float))= List.nth registri 1;;
- let (reg3:(string*float))= List.nth registri 2;;
- let (reg4:(string*float))= List.nth registri 3;;
- let rec sposta (x:float) (y:float): float = match (x,y) with
- (x,y) when x=y->x
- |(x,y) when x<y->sposta (1.0+x) y
- |(x,y) when x>y->sposta (x-1.0) y;;
- //funzione che mi identifica un argometno come registro restituisce un bool
- let is_registry (arg: string): bool =
- if arg="reg1"||arg="reg2"||arg="reg3"||arg="reg4" then true else false;;
- //funzione che restituisce un valore che verrà passato a List.nth per riconoscere il registro
- let which_registry (arg: string): int = match arg with
- "reg1"->0
- |"reg2"->1
- |"reg3"->2
- |"reg4"->3;;
- //funzione addizione registro a registro
- let add_reg_reg (arg1: (string*float)) (arg2: (string*float)): (string*float) = (fst(arg1), (snd(arg1)+snd(arg2)));;
- let arg1=("reg1", 0.0);;
- let arg2=("reg2", 1.0);;
- let test_add_r_r = snd(add_reg_reg arg1 arg2);;
- //funzione per modificare lo stato della svm
- //inc_pc (svm : SVM) : SVM = {svm with pc = svm.pc + 1}
- //rimuove un elemento in una lista in una data posizione
- let rec remove_at (n:int) (lst: (string*float)list): (string*float)list=
- match lst with
- []->[]
- |x::xs->if n=0 then xs else x::remove_at (n-1) xs;;
- //aggiunge un elemento alla lista dei registri
- //inserisci un elemento in una lista in una data posizione
- let rec insert_at (arg: (string*float)) (n:int) (lst: (string*float)list):(string*float)list=
- match lst with
- []->[arg]
- |x::xs->if n=0 then arg::x::xs else x::insert_at arg (n-1) xs;;
- //modifica la lista di modo che possa sostituire l'argomento che ricevo in ingresso al suo interno
- let rimuovi_aggiungi (arg:(string*float)) (lst:(string*float)list): (string*float)list=
- let aux = remove_at (which_registry(fst(arg))) lst
- in insert_at arg (which_registry(fst(arg))) aux;;
- //test della funzione rimuovi aggiungi
- let test_rm_add = rimuovi_aggiungi arg2 registri;;
- //non posso scrivere solo il float nella casella ma devo ridefinire tutta la lista
- //quindi devo trovare un modo per cambiare solo il contenuto di quello che mi interessa e ridargli il resto
- //let modifica_registri (svm: SVM): SVM = { SVM.registri = salva_in_lista (add_reg_reg arg1 arg2) registri}
- let modifica_registri (svm: SVM):SVM = {SVM_test with SVM.registri=test_rm_add};;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement