Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- (*
- Functional Programming
- Mandatory assignment 1
- Student: Alexander Rosenberg Johansen
- s145706
- *)
- (*----------Start of Code--------------*)
- type Name = string //Name of client
- type Mobnum = int //Telephone number
- type Sex = string //Sex
- type Byear = int //Year of birth
- type Theme = string //Theme of interest
- type Toi = Theme list //Themes of interest
- type Client = Name*Mobnum*Sex*Byear*Toi //Client
- type Register = Client list //Registrer of clients
- let reg:Register = [
- //For TestCase1 oppositeSex
- (*1*) ("Jens",12312313,"Male",1970,["Apple<3";"Stargazing"])
- (*2*) ("Sofie",12312313,"Female",1970,["Apple<3";"Stargazing"])
- //For TestCase2 compareAge
- (*3*) ("Lisa", 33333333, "Female",1970, ["Apple<31"; "Stargazing1"]);
- (*4*) ("Gurli", 44444444, "Female", 1990, ["Apple<31"; "Stargazing1"]);
- //For TestCase 3 compareThemes
- (*5*) ("Mads", 11111111, "Male", 1970, ["Dinning";"SpendingMoney";"Fuutbal"]); //Registrer of clients
- //For TestCase3 compareClientThemes
- (*6*) ("Martina", 55555555, "Female", 1990, ["RockClimbing";"StaringOutTheWindow"]);
- (*7*) ("Børge", 66666666,"Male",1990,["HytteliHyt";"Knitting";"DoingOlePeopleStuff"])
- ]
- // oppositeSex: Sex*Register -> Register
- // TestCase 1
- // let response = getResponse("Else",12312347,"Female",1970,["Apple<3";"Stargazing"]),reg);;
- // True return: "Jens"...
- // False return: "Sofie"...
- // False return: "Jens"... ;"Sofie"...
- // False return: []
- let rec oppositeSex = function
- |_, [] -> []
- |s, (n,m,ss,b,t)::reg when s<>ss -> (n,m,ss,b,t)::oppositeSex(s,reg)
- |s, (n,m,ss,b,t)::reg when s=ss -> oppositeSex(s,reg)
- |_,_ ->[]
- // compareAge: Byear*Register -> Register
- // TestCase 2:
- // let response = getResponse(("Mads",12344123,1970,["Apple<31"; "Stargazing1"]),reg);;
- // True return: "Lisa"...
- // False return: "Gurli"..
- // False return: "Lise"...;"Gurli"...
- // False return: []
- let rec compareAge = function
- |_,[] -> []
- |b,(n,m,s,bb,t)::reg -> if (b-bb)>=(-10)&&(b-bb)<=10
- then (n,m,s,bb,t)::compareAge(b,reg)
- else compareAge(b,reg)
- // compareThemes: Toi*Toi -> TOI
- // TestCase 3:
- // let response = getResponse(("Edith",12344123,"Female",1970,[Fuutbal;Dinning]),reg);;
- // True return: "Mads"..["Dinning";"Fuutbal"]
- // KNOWN BUGS: Throws out the 2nd input array while recursing over Themes of Interest
- // False return: "Mads"..["Fuutbal"]
- // False return: "Mads"..["Dinning"]
- // False return: []
- let rec compareThemes = function
- |(_,[]) -> []
- |(t::ts,tt::tts) when t<>tt -> compareThemes(t::ts,tts@tt::[])
- |(t::ts,tt::tts) when t=tt -> t::compareThemes(ts,tts@tt::[])
- |_,_ -> []
- // compareClientThemes: Toi*Register -> Register
- // TestCase 4:
- // let response = getResponse(("Grete",44234423,"Female",1990,["Hyttelihyt"]),reg)
- // True return: "Børge"...
- // True return: "Martina"...
- // False return: "Martina".."Børge"...
- // False return: []
- let rec compareClientThemes = function
- |(_,[]) -> []
- |(t,(n,m,s,b,tt)::reg) -> let newTT = compareThemes(t,tt)
- if newTT<>[]
- then (n,m,s,b,newTT)::compareClientThemes(t,reg)
- else compareClientThemes(t,reg)
- // getResponse: Client*Register -> Register
- let getResponse = function
- |_,[] -> []
- |(n,m,s,b,t),reg -> let afterSex:Register = oppositeSex(s,reg)
- let afterAge:Register = compareAge(b,afterSex)
- (compareClientThemes(t,afterAge)):Register
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement