- 다방: http://www.dabangapp.com/
- 카카오: http://www.slideshare.net/eunminn/clojure-http-api
- 중고몬: https://play.google.com/store/apps/details?id=com.sonaclo.wine&hl=ko
- 4Clojure, ClojureScript Koans
- 빈 칸 채워 넣기
- 클로저의 기초를 재미있게 배울 수 있음
- 기본 자료형
- 정수:
3
- 실수:
1.32
- 문자열:
"abc"
- 키워드:
:a
- 문자열과 비슷하지만 = 검사를 빠르게 할 수 있도록 고안
- 불린(Boolean):
true
,false
- 정수:
- 클로저 식의 형태
- (함수 인자 인자 인자 ...)
- 자료형
- 리스트:
(1 2 3)
- 복합 자료형(컬렉션)
- 순서가 있는 자료구조
- 생성
'(1 2 3)
(list 1 2 3)
- 벡터:
[1 2 3]
- 복합 자료형(컬렉션)
- 순서가 있는 자료구조, 임의접근이 빠름
- 생성
[1 2 3]
(vector 1 2 3)
(vec '(1 2 3))
=
- 컬렉션인 경우는 내용만 본다
- 함수을 알아보려면
- REPL:
(doc 함수)
- http://clojuredocs.org/
- REPL:
- 맵:
{:a 1 :b 2}
- 복합 자료형(컬렉션)
- 키-값 구조의 자료구조
- 생성
{:a 1 :b 2}
- 사용
({:a 1 :b 2} :a) ;=> 1
({:a 1 :b 2} :c) ;=> nil
- nil
- 기본 자료형
- 값의 부재를 의미: 자바의 null
- 집합:
#{1 2 3}
- 복합 자료형(컬렉션)
- 중복이 없는 자료구조
- 생성
#{1 2 3}
(set [1 2 3])
- 사용
(#{1 2 3} 1) ;=> 1
(#{1 2 3} 4) ;=> nil
- first, second, last
- 클로저는 같은 함수를 공용으로 사용하기 위해 시퀀스라는 개념을 사용
- 시퀀스 인터페이스를 구현하여 그 인터페이스를 통해서 처리
- 공용으로 사용하는 방법으로 컬렉션 인터페이스등 다른 종류도 있음
- 다른 시퀀스 함수
- rest
(rest [1 2 3 4]) ;=> (2 3 4)
- reverse
(reverse [1 2 3 4]) ;=> (4 3 2 1)
- take
(take 2 [5 6 7 8 9]) ;=> (5 6)
- drop
(drop 2 [5 6 7 8 9]) ;=> (7 8 9)
- rest
- take 연습
- range
(range 5) ;=> (0 1 2 3 4)
(range 3 6) ;=> (3 4 5)
- drop 연습
- 컬렉션에 값을 추가하기
- conj
- 자료형에 따라 효율적인 방식으로 추가
- conj
- 함수 만들기
(fn [인자1 인자2 ...] 본문)
#(%)
,#(%1 %2 %3)
- 함수 연습
- str : 문자열 생성
(str "abc" "def") ;=> "abcdef"
(str 123) ;=> "123"
- 함수를 주제별로 알아보려면
- 제어문
(if 조건 본문1 분문2)
(if 조건 본문)
- let
(let [x 1 y 2] (+ x y))
- 지역 내에서 이름 붙여서 사용할 때
- let 연습
- map
(map 함수 컬렉션)
- 함수를 컬렉션의 요소에 한번씩 적용
- map 연습
- filter
(filter 조건함수 컬렉션)
- 조건함수의 결과가 참인 것만 선별
- filter 연습
- reduce
(reduce 함수 컬렉션)
- 함수는 인자가 2개. 계산을 누적해 나감.
- 예:
(reduce + [1 2 3 4]) ;=> 10
- reduce
(reduce 함수 초기값 컬렉션)
- 예:
(reduce + 5 [1 2 3 4]) ;=> 15
- reduce 연습
- map, filter, reduce 등이 클로저의 순회방법 중 하나
- 마지막 요소를 반환하는 함수를 작성하라
- 제약조건: last를 사용하지 말것
- 마지막에서 두번째 요소를 반환하는 함수를 작성하라
- 시퀀스에서 홀수만 반환하는 함수를 작성하라
- 힌트:
(odd? 3) ;=> true
- 숫자의 합을 반환하는 함수를 작성하라
- 요소의 총 갯수를 반환하는 함수를 작성하라
- 제약조건: count를 사용하지 말것
- 시퀀스를 뒤집는 함수를 작성하라
- 제약조건: reverse, rseq를 사용하지 말것
- 다룬 내용
- 기본 자료형
- 복합 자료형(컬렉션): 리스트, 벡터, 맵, 집합
- first, second, last, reverse, take, drop, range, conj
- 함수 만들기
- str
- if
- let
- map, filter, reduce
- 찾아보는 방법
- REPL:
(doc 함수)
- http://clojuredocs.org/
- http://clojure.org/cheatsheet
- REPL:
https://docs.google.com/forms/d/17Q7jrxd_gP5PyOHVQWe-8_FFOmAeB6DiOVZdJDLQBbM/viewform