import Data Map critics fromList Lisa Rose fromList Lady in the Water

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
import Data.Map
critics = fromList [
("Lisa Rose", fromList [("Lady in the Water", 2.5),
("Snakes on a Plane", 3.5),
("Just My Luck", 3.0),
("Superman Returns", 3.5),
("You, Me and Dupree", 2.5),
("The Night Listener", 3.0)]),
("Gene Seymour", fromList [("Lady in the Water", 3.0),
("Snakes on a Plane", 3.5),
("Just My Luck", 1.5),
("Superman Returns", 5.0),
("The Night Listener", 3.0),
("You, Me and Dupree", 3.5)]),
("Michael Phillips", fromList [("Lady in the Water", 2.5),
("Snakes on a Plane", 3.0),
("Superman Returns", 3.5),
("The Night Listener", 4.0)]),
("Claudia Puig", fromList [("Snakes on a Plane", 3.5),
("Just My Luck", 3.0),
("The Night Listener", 4.5),
("Superman Returns", 4.0),
("You, Me and Dupree", 2.5)]),
("Mick LaSalle", fromList [("Lady in The Water", 3.0),
("Snakes on a Plane", 4.0),
("Just My Luck", 2.0),
("Superman Returns", 3.0),
("The Night Listener", 3.0),
("You, Me and Dupree", 2.0)]),
("Jack Matthews", fromList [("Lady in the Water", 3.0),
("Snakes on a Plane", 4.0),
("The Night Listener", 3.0),
("Superman Returns", 5.0),
("You, Me and Dupree", 3.5)]),
("Toby", fromList [("Snakes on a Plane", 4.5),
("You, Me and Dupree", 1.0),
("Superman Returns", 4.0)])
]
sim_distance prefs person1 person2 = let squares = intersectionWith (\x y->(x-y)**2) (prefs!person1) (prefs!person2)
in 1/(1+(foldl (+) 0 squares)