Skip to content

Instantly share code, notes, and snippets.

@manmyung
Last active November 26, 2015 10:30
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save manmyung/e69d75a6434453a37b8e to your computer and use it in GitHub Desktop.
Save manmyung/e69d75a6434453a37b8e to your computer and use it in GitHub Desktop.

클로저 설치 (오늘 처음 오신 분)

클로저 응용 예

문제 풀기로 배우기

  • 기본 자료형
    • 정수: 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))
  • =
    • 컬렉션인 경우는 내용만 본다
  • 함수을 알아보려면
  • 맵: {: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)
  • take 연습
  • range
    • (range 5) ;=> (0 1 2 3 4)
    • (range 3 6) ;=> (3 4 5)
  • drop 연습
  • 컬렉션에 값을 추가하기
  • conj
    • 자료형에 따라 효율적인 방식으로 추가
  • conj
  • 함수 만들기
    • (fn [인자1 인자2 ...] 본문)
    • #(%), #(%1 %2 %3)
  • 함수 연습
  • 제어문
  • (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
  • 찾아보는 방법

설문

https://docs.google.com/forms/d/17Q7jrxd_gP5PyOHVQWe-8_FFOmAeB6DiOVZdJDLQBbM/viewform

뒷풀이

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment