Season 1 아카이브/프로그래밍
                
              Functional Programming with Haskell -Specifying a function's type and indentation
                문장전달자
                 2018. 3. 31. 15:06
              
              
                    
        728x90
    
    
  Key points:
• Integer -> Char -> Char 와 같은 타입을 가진 함수의 경우, Integer 과 Char 라는 2개의 인수를 갖고, Char 를 결과로 반환한다.
• f x y z 와 같은 함수 콜이 의미하는 것은 ((f x) y) z 이고 개념적으로는 2개의 이름없는 임시함수가 생성된다.
• 요구되는 것보다 적은 인수로 함수를 호출하면 partial application 이 생성된다.
Specifying a function's type
함수의 정의와 함께 함수의 타입을 특정하는 것이 일반적이다.
Continuation with indentation
하스켈 소스 파일은 연속되는 선언의 모음이나 마찬가지다. 아래 2개의 선언을 포함한 파일을 살펴보자.
1 2 3 4 5  | (blackbriar) root@gcloudx:~/blackbriar# cat indent1.hs add::Integer -> Integer -> Integer add x y = x + y(blackbriar)  | cs | 
선언은 최초 선언한 라인보다 들어쓰기를 함으로써 여러 줄에 걸쳐서 할 수 있다. 이러한 엮인 선언 방식은 보기는 별로일지 모르나 유효한 방식이기는 하다.
1 2 3 4 5 6 7  | add    ::  Integer-> Integer-> Integer add x y  = x  + y   | cs | 
이전 선언과 같은 컬럼에서 다시 그 라인이 시작되면 해당 선언은 끝이 나고, 새로운 선언이 시작되는 셈이다.
1 2 3 4  | (blackbriar) root@gcloudx:~/blackbriar# cat indent2.hs add::Integer -> Integer -> Integer add x y = x + y  | cs | 
실행하면 다음과 같은 파싱 에러가 뜬다.
1 2 3 4 5 6 7 8 9 10  | (blackbriar) root@gcloudx:~/blackbriar# ghci indent2 GHCi, version 7.10.3: http://www.haskell.org/ghc/  :? for help [1 of 1] Compiling Main             ( indent2.hs, interpreted ) indent2.hs:3:1:     parse error (possibly incorrect indentation or mismatched brackets) Failed, modules loaded: none. Prelude>  | cs | 
728x90