Advertisement
Guest User

Untitled

a guest
Nov 20th, 2014
170
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
F# 2.83 KB | None | 0 0
  1. type SVM = {
  2.     memoria: float list;
  3.     registri: (string*float) list;
  4.     pc: int;
  5. }
  6. //inizializazione SVM
  7. let SVM_test ={
  8.     memoria=[0.0;0.0;0.0;0.0;0.0;0.0;0.0;0.0;0.0;0.0];
  9.     //va poi scritta una funzione che inizializzi la memoria per i cento elementi
  10.     registri=[("reg1",0.0);("reg2",0.0);("reg3",1.0);("reg4",0.0)];
  11.     pc=1;
  12. }
  13.  
  14. let (registri: (string*float) list )= SVM_test.registri;;
  15.  
  16. let (reg1:(string*float))= List.nth registri 0;;
  17. let (reg2:(string*float))= List.nth registri 1;;
  18. let (reg3:(string*float))= List.nth registri 2;;
  19. let (reg4:(string*float))= List.nth registri 3;;
  20.  
  21. let rec sposta (x:float) (y:float): float = match (x,y) with
  22.     (x,y) when x=y->x
  23.     |(x,y) when x<y->sposta (1.0+x) y
  24.     |(x,y) when x>y->sposta (x-1.0) y;;
  25.  
  26.  
  27. //funzione che mi identifica un argometno come registro restituisce un bool
  28. let is_registry (arg: string): bool =
  29.     if arg="reg1"||arg="reg2"||arg="reg3"||arg="reg4" then true else false;;
  30. //funzione che restituisce un valore che verrà passato a List.nth per riconoscere il registro
  31. let which_registry (arg: string): int = match arg with
  32.     "reg1"->0
  33.     |"reg2"->1
  34.     |"reg3"->2
  35.     |"reg4"->3;;
  36.  
  37. //funzione addizione registro a registro
  38. let add_reg_reg (arg1: (string*float)) (arg2: (string*float)): (string*float) = (fst(arg1), (snd(arg1)+snd(arg2)));;
  39.  
  40. let arg1=("reg1", 0.0);;
  41. let arg2=("reg2", 1.0);;
  42.  
  43. let test_add_r_r = snd(add_reg_reg arg1 arg2);;
  44. //funzione per modificare lo stato della svm
  45. //inc_pc (svm : SVM) : SVM = {svm with pc = svm.pc + 1}
  46.  
  47. //rimuove un elemento in una lista in una data posizione
  48. let rec remove_at (n:int) (lst: (string*float)list): (string*float)list=
  49.     match lst with
  50.     []->[]
  51.     |x::xs->if n=0 then xs else x::remove_at (n-1) xs;;
  52.  
  53. //aggiunge un elemento alla lista dei registri
  54. //inserisci un elemento in una lista in una data posizione
  55. let rec insert_at (arg: (string*float)) (n:int) (lst: (string*float)list):(string*float)list=
  56.     match lst with
  57.     []->[arg]
  58.     |x::xs->if n=0 then arg::x::xs else x::insert_at arg (n-1) xs;;
  59.  
  60. //modifica la lista di modo che possa sostituire l'argomento che ricevo in ingresso al suo interno
  61. let rimuovi_aggiungi (arg:(string*float)) (lst:(string*float)list): (string*float)list=
  62.     let aux = remove_at (which_registry(fst(arg))) lst
  63.     in insert_at arg (which_registry(fst(arg))) aux;;
  64.  
  65. //test della funzione rimuovi aggiungi
  66. let test_rm_add = rimuovi_aggiungi arg2 registri;;
  67. //non posso scrivere solo il float nella casella ma devo ridefinire tutta la lista
  68. //quindi devo trovare un modo per cambiare solo il contenuto di quello che mi interessa e ridargli il resto
  69.  
  70. //let modifica_registri (svm: SVM): SVM = { SVM.registri = salva_in_lista (add_reg_reg arg1 arg2) registri}
  71.  let modifica_registri (svm: SVM):SVM = {SVM_test with SVM.registri=test_rm_add};;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement