Programming in Haskell 책에는 참 많은 n+k 패턴이 등장한다. 이에 대해 역자 분이 쓰지 않는 편이 좋다는 주석이 달려있는데, 글을 읽어봐도 보이는 곳마다 n+k 패턴이니 이걸 어찌 피해야 하는지 궁금했는데, 단순히 n+k (k>0) 형태만 피하면 되는 듯하다. :http://www.willamette.edu/~fruehr/haskell/evolution.html Junior Haskell programmer (beginning Peano player) fac 0 = 1 fac (n+1) = (n+1) * fac n Another junior Haskell programmer (read that n+k patterns are “a disgusting part of Haskell” [1..
대충 기억해 놓을 내용들 함수형 언어의 인자 여러 모양새와 오브젝트 중심 언어의 포괄적 프로그래밍이 다른 점: 함수형 언어에서는 인자 여러 모양새가 기본 초식인 반면 오브젝트 중심 언어에서는 책 마지막에서 다루는 비교적 고급 기술로 여긴다. 타입 클래스(Type Class)란 말 그대로 타입(Type)의 분류(Class)로서 덧셈이나 곱셈과 같이 모든 타입에 다 적용 가능한 여러 모양 함수는 아니지만 공통점이 있는 많은 타입에 적용 가능한 함수의 타입을 딱 떨어지게 정의하기 위해 Haskell 에서 도입한 독특한 기능입니다. Java : 클래스 정의가 곧 하나의 타입에 대응 Haskell: 클래스는 타입을 모아 놓은 대표 집합, 인터페이스와 유사 (하지만 타입 정의와 인스턴스 선언이 별도) 다른 모듈, ..
좀더 나은 해답은 여기로 http://functional.or.kr/node/131 연속으로 주어진 숫자들이 n개 있으면 이 숫자들의 간격이 1부터 n-1까지 종류별로 모두 있는 경우를 졸리 점퍼(Jolly jumper)라고 부른다. 예를 들어 1 4 2 3이라는 4개의 숫자가 있을 때 1과 4의 간격은 3, 4와 2의 간격은 2, 2와 3의 간격은 1로 1에서 3까지 모두 있다. 숫자 리스트를 입력 받아 졸리 점퍼인지 판단하는 프로그램을 작성하라. 나는 단순히 앞에서 배운 함수들을 이용하여 해당 함수를 작성하였다. -- "jollyJumper.hs" import List (sort) import Pairs (pairs) jollyJumper :: [Int] -> Bool jollyJumper a = s..
초보자를 위한 글 : http://learnyouahaskell.com/modules#making-our-own-modules 간단하게 "Pairs.hs" 파일 안의 pair 란 이름의 함수를 다른 파일에서도 사용하고 싶다면, ( 함수명과 모듈명은 상관 없다; 여기서는 그냥 Pairs, pairs 인 것 ) module Pairs where pairs :: [a] -> [(a,a)] pairs a = zip a (tail a) 위 같이 작성하여 "Pairs.hs" 파일로 저장하면 된다. 주의 할점은 1. 모듈명은 대문자로 시작해야 한다. ( module 키워드 다음에 오는 단어) 2. 하나의 파일에 오직 하나의 모듈 윈도우 환경에서 GHCi의 경우 소문자인 "pairs.hs"도 동작하긴 하나 가이드에는 ..
Haskell에서의 타입은 서로 관계 있는 값들의 모임으로, v::T 라는 표현은 v라는 값이 T 라는 타입에 속함을 나타낸다. 또한 T -> T 타입은 T 타입의 인자를 받아서 T타입의 결과로 대응시키는 함수를 나타낸다. Haskell에서의 기본타입은 Bool, Char, String, Int, Integer, Float, Double 이 있다. 하나의 수는 여러 타입일 수 있는데 이 경우 위에서의 '::'기호를 이용하여 타입을 명시할 수 있다. 3::Int, 3::Integer, 3::Float Int, Integer 모두 정수를 나타내는데 Int의 경우 고정된 크기의 저장공간을 사용하는 타입니다. 필자의 환경에서의 범위는 -2^31 ~ 2^31-1 이며 시스템에 따라 차이가 있다. 하지만 최소한 -..
1. 다음 산술식을 연산 순서에 따라 괄호로 묶어라. 3. 다음 스크립트에 문법 실수가 3군데 있다. 실수를 바로 잡고 스크립트가 잘 돌아가는지 확인해보라. N = a `div' length xs where a = 10 xs = [1,2,3,4,5] n = a `div` length xs where a = 10 xs = [1,2,3,4,5] Prelude> :load divide5 [1 of 1] Compiling Main ( divide5.hs, interpreted ) Ok, modules loaded: Main. *Main> n 2 *Main> 4. 비어 있지 않은 리스트에서 마지막 원소를 고르는 라이브러리 함수 last를 이 장에서 소개한 다른 라이브러리 함수들로 정의 할 수 있음을 보이라. 또,..
기본 산술 연산자 더하기: '+', 빼기: '-', 거듭제곱: '^', 곱하기: '*', 나누기 '/' 정수 나숫셈: `div` (note: 그냥 따옴표가 아닌 역따옴표다. 역따옴표 '`' 기호는 숫자 1 왼쪽의 물결키 와 함께 있는 고넘이다.) *Main> 5 `div` 0 *** Exception: divide by zero *Main> 5 / 0 Infinity 우선 순위는 다른 프로그래밍 언어와 유사한데 주의 할 점은 Prelude> -3 `div` 2 -1 Prelude> (-3) `div` 2 -2 음수를 나타내는 '-' 연산자의 순서가 `div` 연산자 보다 우선순위가 낮다. 리스트 처리용 기본 제공 함수 몇개 Prelude> -3 `div` 2 -1 Prelude> (-3) `div` 2 ..
vim 의 경우 sytax highlight를 기본적으로 제공하여 필자는 gvim을 이용하여 코드를 작성하였다. 좀더 편한 플러그인 셋은 http://projects.haskell.org/haskellmode-vim/ 에서 자료를 얻을 수 있다. 2. 모든 x에 대해 sum[x] = x임을 보여라. sum[x] = x + sum [] = x + 0 ( 0 은 '+' 의 항등원 = x 3. 수로 이루어진 리스트의 곱을 구하는 함수 product를 정의하고, 정의한 함수를 써서 product [2,3,4] = 24 임을 확인해 보라. myProduct[] = 1 myProduct(x:xs) = x * myProduct xs *Main> myProduct[2,3,4] 24 4. qsort 정의를 수정하여 반대..
note: 실습하면서 글 작성중인 뉴비입니다. 내용상 잘못된 점이 있을 수 있으니 양해 부탁드립니다. 이제 먼가 제대로 되는지 확인해보자 적당한 위치에 폴더를 만들고 메모장 등의 에디터(ex: vim)으로 아래 내용을 작성한 후 "qsort.hs" 파일로 저장하였다. "qsort.hs" qsort[] = [] qsort(x:xs) = qsort smaller ++ [x] ++ qsort larger where smaller = [a|a :load qsort [1 of 1] Compiling Main ( qsort.hs, interpreted ) Ok, modules loaded: Main. ( '\\' 역시 디렉토리 구분하는데 사용할 수 있다 cd c:\\Users\\newpolaris\\Projects..
참고서 : 도서관에 맨 밑에 박혀있던 "하스켈로 배우는 프로그램(Programming in Haskell)" 어느책이든 머리말은 꽤 길다. 그냥 넘기고, 실습은 2장부터니 2장으로 바로 전진. GHC 란걸 설치하라고 되어있다. 뭥..뭥미? 머하여간 GHC도 같이 포함되어있고 좋은 유틸도 있으니 Haskell Platform을 깔라고 하네여 http://hackage.haskell.org/platform/windows.html ..용량은 70mb정도 되는데 다운 로드 속도는 1kb 정도 되므로 torrent로 다운 받습니다. 컥 700MB 부족한 SDD 용량이 또 줄어드는 소리가 들립니더 그러나 8장까지는 Hugs란 것을 사용한다고 되어있는데... 아니 의사양반 GHC는 설치해놓고 9장부터 쓰겠다니. Hu..
- Total
- Today
- Yesterday