백엔드/Haskell

    [Haskell] 하스켈 기초반 6강 - 패턴 매칭과 if 표현식 및 let 바인딩

    이번 시간에는 하스켈에 패턴 매칭이라는 것을 배워보고 if 표현식 및 let 바인딩을 알아보겟습니다. if / then / else 하스켈 문법은 if...then...(else...) 형태의 흔한 조건 표현식을 지원합니다 가령 인자가 a보다 작으면 (-1) 을반환하는 함수를 생각 해보면 인자가 0이면 0을, 인자가 0보다 크면 1을 반환합니다. 그런 일을 하는 signum이라는 함수가 이미 정의되 있지만 설명을 위해서 직접 정의해 봅시다. mySignum x = if x 0 then 1 else 0 이것을 다음과 같이 실행해볼 수 있습니다. *Main> mySignum 5 1 *Main> mySignum 0 0 *Main> mySignum (5-10) -1 ..

    [Haskell] 하스켈 기초반 5강 - 타입의 기초2

    이번 5강에서는 지난번 배운 타입의 기초에 2번째 시간입니다. 이번 장에서는 숫자 타입들이 하스켈에서 어떻게 처리되는지 보여주고 타입 시스템의 몇 가지 중요한 특성을 소개하는 시간입니다. Num 클래스 수학에는 함께 더할 수 있는 수의 종류에 몇가지 제약이 존재합니다. 예를 들어서 2 + 3(두 자연수) (-7) + 5.12(음의 정수와 실수) 1/7 + π(유리수와 무리수).. 등이 있습니다.이것들은 모두 타당하며 사실 모든 임의의 두 실수는 덧셈이 가능합니다. 그런 일반성을 가장 단순하게 포착하려면 하스켈에서는 일반화된 Number 타입이 필요하고 그런 (+)의 시그니처는 단순히 아래와 같아야 합니다. (+) :: Number -> Number -> Number 하지만 이런 설계는 컴퓨터가 산수를 하..

    [Haskell] 하스켈 기초반 4강 - 리스트와 튜플

    이번 4강의 시간에는 하스켈의 리스트와 튜플에 대해 배워보도록 하겠습니다. 리스트와 튜플 하스켈에서는 여러 개의 값을 관리하기 위한 근본적인 구조체가 두 가지가 있는데 바로 리스트와 튜플입니다 둘다 여러 값을 하나의 합성값으로 묶음으로써 작동합니다. 리스트 먼저 GHCi 에서 리스트 몇 개를 만들어 봅시다. Prelude> let numbers = [1,2,3,4] Prelude> let truths = [True, False, Flase] Prelude> let strings = ["it's", "perfect", "good", "strings"] 각괄호는 리스트의 범위를 제한하며 개개인의 원소들은 쉼표로 구분합니다. 여기서 중요한 제약으로는 리스트 내의 모든 원소는 타입이 같아야 합니다. 타입이 혼재..

    [Haskell] 하스켈 기초반 3강 - 타입의 기초

    3강에서는 하스켈의 타입에 대해 알아보겠습니다. 프로그래밍에서 타입은 비슷한 값들을 범주로 묶는 역할을 합니다. 하스켈에서 타입 체계는 코드 상에 실수를 줄여주는 강력한 수단이 됩니다. 프로그래밍은 여러 종류의 개제(entity)를 다루는 일들을 합니다. 두 수를 더하는 경우를 생각해보면 2 + 3 2와 3은 무엇인가?라고 묻는다면 당연하게 숫자입니다. 가운데 더하기 기호는 무엇인가? 분명 숫자는 아닌데 이것을 숫자 두 개를 가지고 할 수 있는 연산 즉, 덧셈을 뜻합니다. 만약 본인의 이름을 물어보고 "Hello"라고 답하는 프로그램을 생각해 봅시다. 여러분의 이름도, Hello라는 단어도 숫자도 아닌데 그럼 이것들은 어떻게 설명할 수 있을까요? 우리는 모든 단어와 문자을 통들어 텍스트라고 부를 수도 있..

    [Haskell] 하스켈 기초반 2강 - 진위값

    자 이제부터 2강에서는 진위값에 대해 알아보는 시간을 가져보겠습니다. 1.동등 비교와 기타 비교들 앞 장에서는 다음 코드처럼 등호를 사용하여 변수와 함수를 정의하였습니다. r = 5 이 코드를 프로그래밍적으로 평가하자면 (스코프 안에서) r을 모두 5로 치환한다는 뜻이 됩니다. f x = x + 3 다음 코드에서는 f다음 숫자에 (f의 인자) 가 붙는 모든 자리에 숫자 3을 더한 것으로 치환됩니다. 그렇다면 수학에서 등호는 중요한 요소가 되지만 미묘하게 다른 방식으로도 쓰이게 되는데 그 예로 x + 3 = 5 이 문제에서 우리의 괸심사는 값 5를 x + 3 으로 표현하거나 x + 3을 5로 표현한다는 것이 아닌 등식 x + 3 = 5를 명제(proposition)로서 보고, 어떤 숫자에 x를 3으로 더하..

    [Haskell] 하스켈 기초반 1강 - 변수와 함수

    1강의 모든 예제는 하스켈 소스 파일에 입력하고 그 파일을 GHC로 불러와서 평가할 수 있다. 어떠한 예제든 간에 "Prelude>" 프롬프트는 소스에 포함하는 것이 아니다. 이 프롬프트에서는 GHCi 같은 환경에 코드를 입력할 수 있다는 뜻이며 그 외의 경우에는 코드를 파일에 넣고 그 파일을 실행해야 한다. 1. 변수 (Variable) 앞선 장에서 GHCi를 계산기로 활용했는데, 물론 이런 것은 짧은 계산에나 쓸모가 있고, 더 긴 계산을 하거나 하스켈 프로그램을 작성하기 위해서는 중간 결과들을 보관해줘야 한다. 중간 결과에 이름을 할당하면 그 결과를 보관할 수 있다. 이런 이름을 변수라고 부른다. 프로그램을 실행하면 각 변수는 그 변수가 가리키는 값으로 치환된다. Prelude> 3.141592653..

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

    하스켈 이란? 하스켈(Haskell)은 순수 함수형 프로그래밍 언어입니다. 함수형 프로그래밍 언어란 컴퓨터에게 해야하는 작업을 알려주는 것이 아닌(명령어 프로그래밍 언어), 어떤 작업인지를 알려주는 것이 바로 언어이다. 예를 들어 팩토리얼 1부터 N까지의 숫자를 모두 곱하는 값을 구하는 작업이라 알려주는 것처럼 이러한 작업들에 대해서 함수로 표현할 수 있다. 함수형 프로그래밍에서는 변수의 값을 변경할 수 없다. 그렇기 때문에, 함수가 하는 일은 주어진 작업에 한에서 계산하고 그 결과값을 반환해주는 일만 하면 된다. 절차형 프로그래밍 언어처럼 변수의 값을 변경할 수 없고 함수는 그 결과를 반환하는 일만 하면 되므로 주어진 매개변수가 동일할 시 동일한 결과를 보장하는 특징도 가진다(참조 투명성) 하스켈은 정..