Advertisement
Guest User

AlexanderJohansenAssingmentOne

a guest
Sep 25th, 2014
204
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
F# 3.82 KB | None | 0 0
  1. (*
  2. Functional Programming
  3. Mandatory assignment 1
  4.  
  5. Student: Alexander Rosenberg Johansen
  6. s145706
  7.  
  8. *)
  9.  
  10.  
  11.  
  12. (*----------Start of Code--------------*)
  13.  
  14. type Name = string                       //Name of client
  15. type Mobnum = int                        //Telephone number
  16. type Sex = string                        //Sex
  17. type Byear = int                         //Year of birth
  18. type Theme = string                      //Theme of interest
  19. type Toi = Theme list                    //Themes of interest
  20. type Client = Name*Mobnum*Sex*Byear*Toi  //Client
  21. type Register = Client list              //Registrer of clients
  22. let reg:Register = [
  23.      //For TestCase1 oppositeSex
  24.      (*1*)  ("Jens",12312313,"Male",1970,["Apple<3";"Stargazing"])
  25.      (*2*)  ("Sofie",12312313,"Female",1970,["Apple<3";"Stargazing"])
  26.      //For TestCase2 compareAge
  27.      (*3*)  ("Lisa", 33333333, "Female",1970, ["Apple<31"; "Stargazing1"]);
  28.      (*4*)  ("Gurli", 44444444, "Female", 1990, ["Apple<31"; "Stargazing1"]);
  29.      //For TestCase 3 compareThemes
  30.      (*5*)  ("Mads", 11111111, "Male", 1970, ["Dinning";"SpendingMoney";"Fuutbal"]);   //Registrer of clients
  31.      //For TestCase3 compareClientThemes
  32.      (*6*)  ("Martina", 55555555, "Female", 1990, ["RockClimbing";"StaringOutTheWindow"]);
  33.      (*7*)  ("Børge", 66666666,"Male",1990,["HytteliHyt";"Knitting";"DoingOlePeopleStuff"])
  34.            ]
  35.  
  36. // oppositeSex: Sex*Register -> Register
  37. // TestCase 1
  38. // let response = getResponse("Else",12312347,"Female",1970,["Apple<3";"Stargazing"]),reg);;
  39. // True return: "Jens"...
  40. // False return: "Sofie"...
  41. // False return: "Jens"... ;"Sofie"...
  42. // False return: []
  43. let rec oppositeSex = function
  44.     |_, []                              -> []
  45.     |s, (n,m,ss,b,t)::reg  when s<>ss   -> (n,m,ss,b,t)::oppositeSex(s,reg)
  46.     |s, (n,m,ss,b,t)::reg  when s=ss    -> oppositeSex(s,reg)
  47.     |_,_ ->[]
  48.  
  49. // compareAge: Byear*Register -> Register
  50. // TestCase 2:
  51. // let response = getResponse(("Mads",12344123,1970,["Apple<31"; "Stargazing1"]),reg);;
  52. // True return: "Lisa"...
  53. // False return: "Gurli"..
  54. // False return: "Lise"...;"Gurli"...
  55. // False return: []
  56. let rec compareAge = function
  57.     |_,[] -> []
  58.     |b,(n,m,s,bb,t)::reg -> if (b-bb)>=(-10)&&(b-bb)<=10
  59.                                 then (n,m,s,bb,t)::compareAge(b,reg)
  60.                             else compareAge(b,reg)
  61. // compareThemes: Toi*Toi -> TOI
  62. // TestCase 3:
  63. // let response = getResponse(("Edith",12344123,"Female",1970,[Fuutbal;Dinning]),reg);;
  64. // True return: "Mads"..["Dinning";"Fuutbal"]
  65. // KNOWN BUGS: Throws out the 2nd input array while recursing over Themes of Interest
  66. // False return: "Mads"..["Fuutbal"]
  67. // False return: "Mads"..["Dinning"]
  68. // False return: []
  69. let rec compareThemes = function
  70.     |(_,[])                       -> []
  71.     |(t::ts,tt::tts) when t<>tt    -> compareThemes(t::ts,tts@tt::[])
  72.     |(t::ts,tt::tts) when t=tt     -> t::compareThemes(ts,tts@tt::[])
  73.     |_,_ -> []
  74. // compareClientThemes: Toi*Register -> Register
  75. // TestCase 4:
  76. // let response = getResponse(("Grete",44234423,"Female",1990,["Hyttelihyt"]),reg)
  77. // True return: "Børge"...
  78. // True return: "Martina"...
  79. // False return: "Martina".."Børge"...
  80. // False return: []
  81. let rec compareClientThemes = function
  82.     |(_,[])                  -> []
  83.     |(t,(n,m,s,b,tt)::reg)   -> let newTT = compareThemes(t,tt)
  84.                                 if newTT<>[]
  85.                                     then (n,m,s,b,newTT)::compareClientThemes(t,reg)
  86.                                 else compareClientThemes(t,reg)
  87.  
  88. // getResponse: Client*Register -> Register
  89. let getResponse = function
  90.     |_,[] -> []
  91.     |(n,m,s,b,t),reg -> let afterSex:Register = oppositeSex(s,reg)
  92.                         let afterAge:Register = compareAge(b,afterSex)
  93.                         (compareClientThemes(t,afterAge)):Register
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement