2009-09-21 14 views
9

Po prostu uczę się Haskella i próbuję znaleźć najbardziej idiomatyczny sposób implementacji algorytmu widzenia linii.Czy lepiej jest używać monady State lub rekurencyjnie przekazywać stan?

Kod demo, który znalazłem używa monady stanu, ale wydaje mi się prostszy (jestem dopiero początkującym), aby przekazać stan rekursywnie. Czego tu mi brakuje? Czy występują problemy z wydajnością?

kod znaleźć na stronach: http://www.finalcog.com/bresenham-algorithm-idiomatic-haskell

Dzięki,

Chris.

+0

Cóż, rekursja może być wolniejsza i powodować wzrost stosu. –

+7

@Tnay Recursion może być również szybszy i działać w stałej przestrzeni stosu. – Amok

+5

Warto zauważyć, że monada państwowa i ST ("Wątek stanu", którego używa twój artykuł) monada to nie to samo. – jrockway

Odpowiedz

11

Może stać się trochę gadatliwy, aby podać stan wszędzie. Monada państwowa jest dobrze znana większości programistów, więc będą wiedzieć, co robisz. Jeśli potoczysz własną rękę, poza monadą, może być trudno odkryć, co robi twój kod.

Uważam, że monada państwowa jest nieskomplikowana do enkapsulacji zmian stanu, to całkiem oczywiste, jaka część twojego kodu jest stanowa (tj. Zmienia się lub zależy od stanu) w.r.t. resztę czystych rzeczy.

+1

Dobrze jest także nauczyć się, jak dobrze używać monad, więc używanie ich w sytuacji, w której wiesz, jak osiągnąć to samo, może być dobrym sposobem nauki. – Amok

10

W przypadku większych programów lepiej ukryć stan przechodzącej instalacji hydraulicznej w monadzie. Wówczas występuje mniejsze ryzyko błędu.

3

Zaletą korzystania z monady do przekazywania stanu, a nie jawnego przekazywania stanu, jest to, że istnieje wiele użytecznych kombinatorów zdefiniowanych dla monad, z których można korzystać.

Powiązane problemy