'프로그래밍/Haskell'에 해당되는 글 13건

  1. 2009.10.18 거듭제곱(지수) 계산 with Haskell
  2. 2009.05.29 구구단 출력 예제 with Haskell
  3. 2009.05.26 Hello 예제 with Haskell

Haskell 언어에서 지수 계산하는 연산자는 ^와 ** 두 가지가 있다.
그런데 ^는 긴 계산 결과가 긴 정수이고, **는 게산 결과가 부동소수점수이다.

* GHC의 ghci를 이용하여 지수 계산을 테스트해 보았다.
  :set prompt "스트링"은 GHC에서 지원하는 프롬프트 변경 명령이다.


GHCi, version 6.10.4: http://www.haskell.org/ghc/  :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer ... linking ... done.
Loading package base ... linking ... done.
Prelude> :set prompt "ghci> "
ghci> 2 + 2
4
ghci> 3 + 5
8
ghci> 5^121
37615819226313200254999569191111861690197297816706800688280054600909352302551269
53125
ghci> 5**121
3.76158192263132e84
ghci>



* WinHugs의 hugs를 이용하여 지수 계산을 테스트해 보았다.
  :set -p"스트링"은 WunHugs에서 지원하는 프롬프트 변경 명령이다.

__   __ __  __  ____   ___      _________________________________________
||   || ||  || ||  || ||__      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> :set -p"winhugs> "
winhugs> 5^121
37615819226313200254999569191111861690197297816706800688280054600909352302551269
53125
winhugs> 5**121
3.76158192263129e+084




* WinHugs의 winhugs를 이용하여 지수 계산을 테스트해 보았다.
<winhugs에서 지수 계산>





Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
Posted by Scripter
,

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 함수가 작성되어 있기 때문이다.


<wingugs.exe를 이용하여 Gugudan.hs를 실행시킨 장면>






Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.


Posted by Scripter
,

Haskell 언어는 Pascal, C, Java 같은 절차적 언어가 아니라, Lisp 처럼  햠수형 언어이다.

소스 코드를 파일로 저장하여 runghc 나 ghci로 실행하거나, ghc로 컴파일하려면, 소스 코드에
main =
부분이 꼭 있어야 한다.

Haskell 언어 홈페이지는 www.haskell.org 이다.
여기서는 윈도우용 GHC를 다운로드하여 설치하고 테스트하였다.
(http://hackage.haskell.org/platform/에서 HaskellPlatform-2009.2.0.2-setup.exe를 다운로드하여 설치해도 된다.)

Hugs 홈페이지(http://www.haskell.org/hugs/)에서 WinHugs-Sep2006.exe (14 MB)를 다운로드하여 설치해도 된다.


컨솔에 문자열 출력하는 Haskell 구문은

       putStrLn "문자열(스트링)"

       putStr "문자열(스트링)"

이다. putStrLn 구문은 개행 문자 "\n" 없이 개행하지만, putStr 구문은 개행 문자 "\n"를 추가해야 개행한다.



파일명: hello.hs
------------------------------[소스 시작]
main = putStrLn "Hello, world!"
------------------------------[소스 끝]

대화형 인터프리터 ghci로 실행하기:

실행> ghci hello.hs
GHCi, version 6.10.1: http://www.haskell.org/ghc/  :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer ... linking ... done.
Loading package base ... linking ... done.
Ok, modules loaded: Main.
Prelude Main> main
Hello, world!
Prelude Main> ^Z
Leaving GHCi.

위에서 ^Z는 인터프리터 ghci를 종료하기 위해 Ctrl+Z키를 누른 것이다.



컴파일하지 않고 runghc로 실행하기:

실행> runghc hello
Hello, world!

또는

실행> runghc hello.hs
Hello, world!


컴파일러 ghc로 컴파일한 후 실행하기:

컴파일> ghc --make hello.hs
실행> hello
Hello, world!

또는

컴파일> ghc -o hello hello.hs
실행> hello
Hello, world!

또는

컴파일> ghc hello.hs
실행> main
Hello, world!



  WinHugs의 경우 runhugs 명령을 이용하면 타 스크립팅 언어(예를 들어, Python 또는 Ruby)의 실행기 처럼 스크립트 소스파일을 실행시킬 수 있다. GHC는 한글 출력이 안되지만, runhugs는 한글 출력도 잘 된다. 성능은 GHC가 좋겠지만, Haskell 언어를 처음 접하는 경우에는 WinHugs를 이용하는 것이 좋다고 본다.


실행> runhugs hello.hs
Hello, world!


WinHugs의 hugs 명령은 GHC의 대화형 인터프리터 ghci에 해당한다.

실행> 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 hello.hs
Main> main
Hello, world!

Main> putStr "한글"
한글
Main> ^Z
[Leaving Hugs]


위에서 마지막에 ^Z는 Ctrl+Z 키를 눌러 hugs 를 종료한 것이다.


  다음은 그래픽 사용자 환경(GUI)을 지원하는 winhugs.exe를 실행하여 한글을 출력시켜 본 것이다.  ++는 스트링을 연결(concatenation) 연산자이며, putStrLn ( ...... ) 처럼 소괄호를 둘러싼 것은 연결된 스트링이 출력 대상이기 때문이다, 소괄호로 둘러싸지 않으면 Haskell 구문 에러이다.



<winhugs.exe를 실행한 WinHugs의 GUI>


크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by Scripter
,