Haskell 언어로 숫자 맞추기 게임을 작성해 보았다.
순수한 함수형 언어로는 반복문을 어떻게 구현하는 가를 보여주는 한 예제로 보면 된다.  

대화형 방식으로 사용자의 입력 스트링을 받아서 정수로 변환하여 비교 처리하는 과정도 눈여겨 볼 만한 부분이다. (18째 줄 이하)



소스 파일명: guessNumber01.hs

  1. {-# 
  2.    Filename: guessNumber01.hs
  3.    Purpose:  Interactive game guessing a given number.
  4.                  if .... else ... then ...
  5.    Execute: runhugs guessNumber01.hs
  6.          Or
  7.             runhaskell guessNumber01.hs
  8. #-}
  9. module Main where
  10. main :: IO ()
  11. main = doGuessing 123
  12. doGuessing :: (Ord a, Read a) => a -> IO ()
  13. doGuessing num = do
  14.   putStrLn "Enter your guess: "
  15.   guess <- getLine
  16.   case compare (read guess) num of
  17.     EQ -> do putStrLn "You win!"
  18.              return()
  19.     LT -> do print "Too low!";
  20.              doGuessing num
  21.     GT -> do print "Too high!";
  22.              doGuessing num



WinHugs의 runhugs.exe를 이용하여 스크립트 소스파일 guessNumber01.hs을 실행해 보았다.

실행> runhugs guessNumber01.hs
Enter your guess:
111
"Too low!"
Enter your guess:
222
"Too high!"
Enter your guess:
123
You win!



GHC의 runhakell을 이용하여 스크립트 소스파일 guessNumber01.hs을 실행해 보았다.
(주석문 {-# .... #-} 이 GHC에서는 인식되지 않음을 알 수 있다.)

실행> runhaskell guessNumber01.hs

guessNumber01.hs:1:0: Unrecognised pragma

guessNumber01.hs:1:0: Unrecognised pragma
Enter your guess:
111
"Too low!"
Enter your guess:
222
"Too high!"
Enter your guess:
123
You win!



WinHugs의 대화형 인터프리터 hugs.exe를 이용하여 스크립트 소스파일 guessNumber01.hs를 실행해 보았다. 마지막에 :quit는 인터프리터를 종료하는 명령이다.


실행> 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 guessNumber01.hs
Main> main
Enter your guess:
111
"Too low!"
Enter your guess:
222
"Too high!"
Enter your guess:
123
You win!

Main> :quit
[Leaving Hugs]





WinHugs의 GUI 대화형 인터프리터 winhugs.exe를 이용하여 스크립트 소스파일 Gugudan.hs을 실행해 보았다. :cd는 change directory 명령이고 :load는 소스파일 탑재(load) 명령이다.
소스파일이 탑재되고 나면 프롬프트가 Main> 으로 바뀐다. 이는 소스파일에 main 함수가 작성되어 있기 때문이다.


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






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


Posted by Scripter
,