2009-09-21 3 views
9

저는 하스켈을 배우면서 시선 알고리즘을 구현하는 가장 관용적 인 방법을 찾아 내려고했습니다.State 모나드를 사용하거나 재귀 적으로 상태를 전달하는 것이 더 낫습니까?

내가 찾은 데모 코드는 상태 모나드를 사용하지만 재귀 적으로 상태를 전달하는 것이 나에게 더 단순 해 보인다. 내가 여기서 무엇을 놓치고 있니? 성능 문제가 있습니까?

찾기 코드 : http://www.finalcog.com/bresenham-algorithm-idiomatic-haskell

감사합니다,

크리스.

+0

잘 재귀가 느려지고 스택이 커질 수 있습니다. –

+7

@Tnay 재귀는 스택 공간을 더 빠르게 사용하고 실행할 수도 있습니다. – Amok

+5

모나드와 ST (귀하의 기사에서 사용하는 "State Thread") 모나드가 동일하지 않다는 점은 중요합니다. – jrockway

답변

11

어디에서나 상태를 전달하는 데 약간 자세한 정보가 표시 될 수 있습니다. 또한, 상태 모나드는 대부분의 haskell 코더들에게 잘 알려져 있으므로 그들이하는 일을 알게 될 것입니다. 모나드 밖에서 자신 만의 코드를 작성하면 코드가하는 일을 식별하는 것이 까다로울 수 있습니다.

상태 변경을 캡슐화하기 위해 상태 모나드가 깔끔하다는 것을 알았습니다. 코드의 어떤 부분이 상태가 바뀌는 지 (예 : 변경되거나 상태에 따라 다름) w.r.t. 나머지 순수한 것들.

+1

모나드를 잘 사용하는 법을 배우는 것도 중요합니다. 그래서 똑같은 일을 어떻게 성취 할 수 있는지 알고있는 상황에서 사용하면 좋은 학습 방법이 될 수 있습니다. – Amok

10

큰 프로그램의 경우 모나드에서 배관을 통과하는 상태를 숨기는 것이 좋습니다. 오류 발생 위험이 적습니다.

3

명시 적으로 상태를 전달하는 대신 모나드를 사용하여 상태를 전달하는 이점은 사용할 수있는 모나드에 대해 정의 된 여러 가지 유용한 결합자가 있다는 것입니다.

관련 문제