Header

  1. View current page

    Haskell Programming Language

Profile_image?t=1224044209&type=small
Haskell 관련 자료 정리
7

하스켈로 펙토리얼 함수를 만드는 24가지 방법

 

원문 보기: The Evolution of a Haskell Programmer

예전에 본 Hello world 프로그램 짜기에 관한 유머를 연상케 하는 글...
Haskell.org 에는 유머라고 분류해 놓았긴 하지만 단순히 유머라 하기엔 하스켈에서 지원하는 람다식, 패턴매칭, points-free, continuation-passing, accumulating recursive 등등의 다양한 기법들을 한번에 접할 수 있어 유용한 글 인듯...
밑으로 가면 말도 안되는 소스가 나오는데 그건 무시...^^

참고로 가장 적은 글자수로 구현한 펙토리얼 함수는 아래와 같다. (위 글에 의하면 종신 재직 교수의 방법 ^^)

  1. f n=product[1..n]

빈칸 포함 17자...

원문에 보면 모나드를 사용한 방법이 없어서 아쉽다는 말이 나오는데...
방법이야 무궁무진 하지만 이런 문제에는 모나드가 어울리진 않는다.

어쨌든 당장 생각나는 방법은 IORef 를 사용하는 방법인데 아래와 같다.

  1. import Data.IORef
    import Monad
  2. 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)

You must log in to leave a comment. Please sign in.