백엔드/Haskell

[Haskell] 하스켈 이란? 함수형 프로그래밍

Koras02 2022. 4. 5. 17:45

하스켈 이란?

하스켈(Haskell)은 순수 함수형 프로그래밍 언어입니다.

 

함수형 프로그래밍 언어란 컴퓨터에게 해야하는 작업을 알려주는 것이 아닌(명령어 프로그래밍 언어),

어떤 작업인지를 알려주는 것이 바로 언어이다.

 

예를 들어 팩토리얼 1부터 N까지의 숫자를 모두 곱하는 값을 구하는 작업이라 알려주는 것처럼

이러한 작업들에 대해서 함수로 표현할 수 있다.

 

함수형 프로그래밍에서는 변수의 값을 변경할 수 없다. 그렇기 때문에, 함수가 하는 일은 

주어진 작업에 한에서 계산하고 그 결과값을 반환해주는 일만 하면 된다.

 

절차형 프로그래밍 언어처럼 변수의 값을 변경할 수 없고

함수는 그 결과를 반환하는 일만 하면 되므로 주어진 매개변수가 동일할 시 동일한 결과를 보장하는

특징도 가진다(참조 투명성)

 

하스켈은 정적인 언어로 프로그램을 컴파일 할 때 숫자와 문자에 대한 타입을 엘게 된다는 의미

또한 타입유추가 가능한데, 문자를 String으로 명시하지 않아도, 타입 유추로 인해 

하스켈은 이미 해당 값의 타입을 알고 있다는 의미 (내가 배우는 이유중 하나)

 

하스켈 환경 세팅하기 (우분투 기준)

본격적으로 하스켈을 맛보기 위해 아래 명령어를 통해 우분투 기준으로 하스켈 다운이 가능하다.

기존 세팅 없이 테스트 만 해보고 싶다면 아래 사이트로 이동해 테스트 하면 된다.

 

Haskell Online Compiler & Interpreter

Write and run Haskell code using our Haskell online compiler & interpreter. You can build, share, and host applications right from your browser!

replit.com

리눅스 & Mac 기준으로 아래 명령어를 통해 터미널에서 설치하면 된다.

curl --proto '=https' --tlsv1.2 -sSf https://get-ghcup.haskell.org | sh

하스켈 실행 하기 

설치가 완료되었다면 계속해서 터미널에 ghci명령어를 입력하면 GHC의 interactive 모드가 실행된다.

혹시라도 Default Frompt(디폴트 프롬프트)가 나올 시 (Prelude>), .ghci 란 파일명으로 다음과 같은 내용을 가진 파일을 생성

:set prompt "ghci>"

interacitve 모드에서 바로바로 함수 연산이 가능하지만, 스크립트 파일을 실행할 수 도 있다. .hs 파일 확장자를 가진 파일을 

컴파일 하기 위해 아래 명령어를 사용하자 

ghci> :l 함수파일이름 
ghci> :l 함수파일이름.hs

하스켈 소스 파일 

하스켈을 테스트 해보기 위해 .hs 파일을 만들어서 테스트 해볼 수 있습니다.

r = 5.0

테스트 코드를 위처럼 변수 r을 값 5.0으로 설정후 haskell 모드에서 함수 파일 이름을 실행해봅니다.

 

주의: 하스켈을 시작 부분에 공백이 없는지 꼼꼼히 확인하는 민감한 언어이기에 꼭 공백확인하자!!

 

그다음 터미널에서 GHCi를 열고 :load명령어로 hs파일을 실행해보자.

GHCi, version 8.10.7: https://www.haskell.org/ghc/  :? for help
Prelude> :load hs.hs
[1 of 1] Compiling Main             ( hs.hs, interpreted )
Ok, one module loaded.
*Main>

:load 명령어:l 명령어로 축약할 수 있다.

 

GHCi가 "Colud not find module "hs.hs" 같은 오류를 내뿜는다면 GHCi를 다른 디렉토리에 실행했거나 파일을 다른 디렉토리에 저장했을 가능성이 있다. GHCI안에 :cd명령어를 사용해 디렉토리를 변경하자!

 

파일을 불러왔다면 GHCi의 프롬프트가 "Prelude"에서 "Main"으로 변경될 것이다. 이제 새로 정의한 변수 r을 계산에 활용해보자.

*Main> r
5.0
*Main> pi * r^20
2.996056226339143e14

참고 자료

 

[Hashkell] 하스켈이란? 하스켈 설치방법, 실행방법

하스켈 이란? 순수한 함수형 프로그래밍 언어이다. 함수형 프로그래밍 언어는 컴퓨터에게 해야하는 작업을 알려주는 것이 아닌 (명령형 프로그래밍 언어), 작업이 무엇인지를 알려주는 언어이

velog.io

 

WikibooksHaskell

# 소개 이 책은 [wikibooks의 하스켈 책](https://en.wikibooks.org/wiki/Haskell)을 번역한 것입니다. 원문의 라이선스를 따라 이 책 ...

wikidocs.net