Advertisement
Guest User

Untitled

a guest
May 28th, 2015
258
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.04 KB | None | 0 0
  1. //1
  2. type boolex = Const of bool | Var of char | And of boolex * boolex | Neg of boolex;;
  3.  
  4. type environment = char list;;
  5.  
  6. let rec eval exp env=
  7. match exp with
  8. |Const b -> b
  9. |Var c -> List.exists (fun x->x=c) env
  10. |And (b1,b2)->
  11. if eval b1 env && eval b2 env
  12. then true
  13. else false
  14. |Neg b->
  15. if eval b env
  16. then false
  17. else true
  18.  
  19.  
  20. let env1 = ['b'; 'c'];;
  21. let env2 =['c'] ;;
  22.  
  23. let b1 = And(Var 'b',Var 'c');;
  24. let b2 = And(Neg b1, Const (3+5 = 8));;
  25.  
  26. eval b1 env1;;
  27. eval b1 env2;;
  28. eval b2 env1;;
  29. eval b2 env2;;
  30.  
  31. //2
  32. //type enviroment = Map<char,bool>;;
  33. type ifex = Bool of bool | V of char | If of ifex * ifex * ifex
  34.  
  35. //let if_env1 = Map.add 'x' true (Map.add 'y' false Map.empty);
  36. //let if_env2 = Map.add 'x' false (Map.add 'y' true Map.empty);
  37.  
  38. //3
  39. let rec ifeval exp env =
  40. match exp with
  41. |Bool b -> b
  42. |V s -> List.exists (fun x->x=s) env
  43. |If (c,v,f) ->
  44. if (ifeval c env)
  45. then ifeval v env
  46. else ifeval f env
  47.  
  48. let env3 =['x'] ;;
  49.  
  50. let prova_1 = ifeval (If(Bool (3 = 4), Bool (1<2), If(Bool true, V 'x' , V 'y'))) env1
  51. let prova_2 = ifeval (If(Bool (3 = 4), Bool (1<2), If(Bool true, V 'x' , V 'y'))) env2
  52. let prova_3 = ifeval (If(Bool (3 = 4), Bool (1<2), If(Bool true, V 'x' , V 'y'))) env3
  53.  
  54. //4
  55. let rec bool2if bx=
  56. match bx with
  57. |Const b -> Bool b
  58. |Var c -> V c
  59. |And (a,b)->If(bool2if a,bool2if b,Bool false)
  60. |Neg a -> If(bool2if a, Bool false, Bool true)
  61.  
  62. let try_conversion = And( Neg(Const true),Const true);;
  63. let conversione = bool2if try_conversion;; // if( if(true,false,true), true, false )
  64.  
  65. //5
  66. #r @"C:\Users\ceffa\Documents\Visual Studio 2013\Projects\packages\FsCheck.1.0.4\lib\net45\FsCheck.dll";;
  67. open FsCheck
  68.  
  69. let prop bx env=
  70. ifeval (bool2if bx) env = eval bx env
  71.  
  72. Check.Quick prop;
  73.  
  74.  
  75. //ESERICZIO 2
  76.  
  77. //funzioncina per stampare inizio delle liste
  78. let printseq s n = Seq.take n s |> Seq.toList ;;
  79.  
  80. let nat = Seq.initInfinite (fun x -> x);;
  81. let seq1 = seq{
  82. yield 0 ;
  83. yield 1 ;
  84. yield 2 ;
  85. yield 0 ;
  86. yield 3 ;
  87. yield 4 ;
  88. yield 4 ;
  89. yield 3 ;
  90. yield 1 ;
  91. yield! Seq.initInfinite (fun x -> x+5)
  92. }
  93.  
  94. let seq2 = Seq.initInfinite (fun x -> (x/2));;
  95.  
  96. let seq3 =
  97. let rec add_chunk n =
  98. seq{
  99. for i in 0..n do yield i;
  100. yield! add_chunk (n+1)
  101. }
  102. add_chunk 0;
  103.  
  104. printseq nat 20;;
  105. printseq seq1 20;;
  106. printseq seq2 20;;
  107. printseq seq3 20;;
  108.  
  109. let rec is_in_list ls n=
  110. match ls with
  111. |[]->false
  112. |x::xs->if (x=n) then true else is_in_list xs n
  113.  
  114. let add_to_list ls n =
  115. if (is_in_list ls n = false) then n::ls else ls
  116.  
  117. let rec auxiliary_distinct sq ls=
  118. let first = Seq.nth 0 sq
  119. let tail = Seq.skip 1 sq
  120. seq{
  121. if is_in_list ls first = false then yield first;
  122. yield! auxiliary_distinct tail (add_to_list ls first)
  123. }
  124.  
  125. let distinct sq =
  126. auxiliary_distinct sq []
  127.  
  128. printseq (distinct nat) 20;;//tutti e 4 uguali
  129. printseq (distinct seq1) 20;;
  130. printseq (distinct seq2) 20;;
  131. printseq (distinct seq3) 20;;
  132.  
  133. [1;2;3;4] = [1;2;3;4]
  134.  
  135. let isEqual sq1 sq2 n=
  136. (Seq.take n sq1 |> Seq.toList) = (Seq.take n sq2 |> Seq.toList)
  137.  
  138. isEqual nat seq1 20;; //false
  139. isEqual (distinct nat) (distinct seq2) 20;; //true
  140. isEqual nat (distinct seq1) 20;;//true
  141. isEqual nat (distinct seq2) 20 ;;//true
  142. isEqual nat (distinct seq3) 20;;//true
  143.  
  144. #r "cset"
  145. open FSet
  146. let f1 = FSet.empty;;
  147. FSet.contains 3 f1;;
  148. let f2 = FSet.singleton 3;
  149. FSet.contains 3 f2;;
  150. let f3 = FSet.add 4 f1;;
  151. let f4 = FSet.union f3 f1;
  152. FSet.contains 4 f3;;
  153. FSet.contains 4 f4;;
  154. let f5 = FSet.ofList [2;4;7;99;100;1000; 11];;
  155. FSet.contains 4 f5;;
  156. FSet.contains 99 f5;;
  157. FSet.contains 900 f5;;
  158. FSet.contains 11 f5;;
  159.  
  160. #r @"C:\Users\ceffa\Documents\Visual Studio 2013\Projects\packages\FsCheck.1.0.4\lib\net45\FsCheck.dll";;
  161. open FsCheck
  162.  
  163.  
  164. let prop_fset n (set : int list)=
  165. Set.contains n (Set.ofList set) = FSet.contains n (FSet.ofList set)
  166.  
  167.  
  168. Check.Quick prop_fset;;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement