Po ponad roku kłótni umysłowych, w końcu rozumiem Haskella na tyle dobrze, aby uznać go za główny język dla większości moich ogólnych potrzeb programistycznych. Absolutnie to uwielbiam.Funkcjonalne porównywanie zestawów danych ze sobą raz z Haskellem
Ale wciąż zmagam się z robieniem bardzo konkretnych operacji w sposób funkcjonalny.
Uproszczony przykład:
Set = [("Bob", 10), ("Megan", 7), ("Frank", 2), ("Jane", 11)]
Chciałbym porównać te wpisy do siebie. W języku takim jak C lub Python prawdopodobnie utworzyłbym skomplikowaną pętlę, ale nie jestem pewien, które podejście (mapa, składanie, zrozumienie listy?) Byłoby najlepsze lub najbardziej wydajne z językiem funkcjonalnym.
Oto przykładowy kod zacząłem pracować na:
run xs = [ someAlgorithm (snd x) (snd y) | x <- xs, y <- xs, x /= y ]
Predykat utrzymuje listowych z porównując dane z siebie, ale funkcja ta jest bardzo skuteczna, ponieważ porównuje wpisy, które zostały już porównywane. Na przykład. Porówna Boba z Megan, a następnie porówna Megan z Bobem.
Wszelkie porady dotyczące rozwiązania tego problemu byłyby bardzo mile widziane.
Mówisz, że chcesz je porównać, ale nie to, co chcesz zrobić z wynikiem porównania. Z twojej próbki wydaje się, że chcesz spojrzeć na każdy wybór dwóch różnych elementów z listy. Czy to to? –
Tak, ale nie "do tyłu". Chciałbym porównać Boba z Megan, Boba z Frankiem, Boba z Jane, a potem Megan z Frankiem, Megan z Jane, a potem z Frankiem z Jane (myślę, że obejmuje wszystkie kombinacje). Wygląda to na coś, co można zrobić z krotnie, ale nie jestem pewien. –