Haskell 언어로 구구단 중의 2단을 출력하는 프로그램 소스를 작성해 보았다.
Haskell 언어는 순수한 함수형 언어이기 때문에 절차적 언어에서 많이 쓰는 for 반복문을 지원하지 않는다.
아래의 소스에서는 리스트 자료형을 적절히 사용하였다.
ex는 정수들로 구성된 리스트를 참조하는 변수로, dan은 정수 2를 의미하는 상수로 사용되었다.
es는 구구단의 단을 의미하는 정수(여기서는 2)를 인자로 받아서 출력될 스트링의 리스트를 만드는 함수이다. 'show 인자'는 인자(여기서는 정수)를 스트링으로 변환하는 일을 한다.
printDan은 세 함수 map, concat , putStr를 합성한 함수로서 스트링의 리스트를
인자로 받아 리스트의 각 요소(스트링) 마다 새줄 문자 "\n"를 붙여서 컨솔에 출력하는 일을 한다. 소스에서 점(.)은 함수의 합성 연산자이다.
소스 파일명: Gugudan.hs
------------------------------[소스 시작]
ex :: [Int]
ex = [1, 2 .. 9]
es :: Int -> [[Char]]
es dd = [ show dd ++ " * " ++ show x ++ " = " ++ show (dd*x) | x <- ex ]
printDan :: [[Char]] -> IO ()
printDan = putStr . concat . map (++"\n")
dan :: Int
dan = 2
main = do printDan (es dan)
------------------------------[소스 끝]
WinHugs의 runhugs.exe를 이용하여 스크립트 소스파일 Gugudan.hs을 실행해 보았다.
실행> runhugs Gugudan.hs
2 * 1 = 2
2 * 2 = 4
2 * 3 = 6
2 * 4 = 8
2 * 5 = 10
2 * 6 = 12
2 * 7 = 14
2 * 8 = 16
2 * 9 = 18
2 x 1 = 2
2 x 2 = 4
2 x 3 = 6
2 x 4 = 8
2 x 5 = 10
2 x 6 = 12
2 x 7 = 14
2 x 8 = 16
2 x 9 = 18
WinHugs의 대화형 인터프리터 hugs.exe를 이용하여 스크립트 소스파일 Gugudan.hs을 실행해 보았다. 마지막에 :quit는 인터프리터를 종료하는 명령이다. 즉, Ctrl+Z 키를 누른 경우와 같다.
실행> hugs
__ __ __ __ ____ ___ _________________________________________
|| || || || || || ||__ Hugs 98: Based on the Haskell 98 standard
||___|| ||__|| ||__|| __|| Copyright (c) 1994-2005
||---|| ___|| World Wide Web: http://haskell.org/hugs
|| || Bugs: http://hackage.haskell.org/trac/hugs
|| || Version: 20051031 _________________________________________
Haskell 98 mode: Restart with command line option -98 to enable extensions
Type :? for help
Hugs> :load Gugudan.hs
Main> main
2 * 1 = 2
2 * 2 = 4
2 * 3 = 6
2 * 4 = 8
2 * 5 = 10
2 * 6 = 12
2 * 7 = 14
2 * 8 = 16
2 * 9 = 18
Main> :quit
[Leaving Hugs]
WinHugs의 GUI 대화형 인터프리터 winhugs.exe를 이용하여 스크립트 소스파일 Gugudan.hs을 실행해 보았다. :cd는 change directory 명령이고 :load는 소스파일 탑재(load) 명령이다.
소스파일이 탑재되고 나면 프롬프트가 Main> 으로 바뀐다. 이는 소스파일에 main 함수가 작성되어 있기 때문이다.
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
'프로그래밍 > Haskell' 카테고리의 다른 글
Haskell 언에에서 형(type) 변환하기 (0) | 2009.10.19 |
---|---|
if...else... 조건문 사용 예제 for Haskell (0) | 2009.10.19 |
명령행 아규먼트 처리 예제 with Haskell (0) | 2009.10.18 |
거듭제곱(지수) 계산 with Haskell (0) | 2009.10.18 |
Hello 예제 with Haskell (0) | 2009.05.26 |