하스켈로 펙토리얼 함수를 만드는 24가지 방법
원문 보기: The Evolution of a Haskell Programmer
예전에 본 Hello world 프로그램 짜기에 관한 유머를 연상케 하는 글...
Haskell.org 에는 유머라고 분류해 놓았긴 하지만 단순히 유머라 하기엔 하스켈에서 지원하는 람다식, 패턴매칭, points-free, continuation-passing, accumulating recursive 등등의 다양한 기법들을 한번에 접할 수 있어 유용한 글 인듯...
밑으로 가면 말도 안되는 소스가 나오는데 그건 무시...^^
참고로 가장 적은 글자수로 구현한 펙토리얼 함수는 아래와 같다. (위 글에 의하면 종신 재직 교수의 방법 ^^)
- f n=product[1..n]
빈칸 포함 17자...
원문에 보면 모나드를 사용한 방법이 없어서 아쉽다는 말이 나오는데...
방법이야 무궁무진 하지만 이런 문제에는 모나드가 어울리진 않는다.
어쨌든 당장 생각나는 방법은 IORef 를 사용하는 방법인데 아래와 같다.
- import Data.IORef
import Monad - fac n = newIORef 1 >>= (\x->fac' n x >> readIORef x)
fac' n ret = when (n>0) (readIORef ret >>= (\x
-> writeIORef ret (x*n) >> fac' (n-1) ret))
History
Last edited on 03/13/2008 21:01 by gimmesilver
Comments (0)