46
제 5회 Lisp seminar @D2 STARTUP FACTORY, 2016.11.12 김선호 Clojure, 웹개발이 다가 아니에요

core.logic (Clojure)

Embed Size (px)

Citation preview

Page 1: core.logic (Clojure)

제�5회�Lisp�seminar�@D2�STARTUP�FACTORY,�2016.11.12

김선호

Clojure,��

웹개발이�다가�아니에요

Page 2: core.logic (Clojure)

제�5회�Lisp�seminar�@D2�STARTUP�FACTORY,�2016.11.12

Clojure�가�잘할�수�있는�영역?

Page 3: core.logic (Clojure)

제�5회�Lisp�seminar�@D2�STARTUP�FACTORY,�2016.11.12

Clojure�가�잘할�수�있는�영역?

Java에�비해�편리한

Page 4: core.logic (Clojure)

제�5회�Lisp�seminar�@D2�STARTUP�FACTORY,�2016.11.12

chap16.�

생각하는�프로그램

Page 5: core.logic (Clojure)

제�5회�Lisp�seminar�@D2�STARTUP�FACTORY,�2016.11.12

core.logic

Page 6: core.logic (Clojure)

제�5회�Lisp�seminar�@D2�STARTUP�FACTORY,�2016.11.12

Page 7: core.logic (Clojure)

제�5회�Lisp�seminar�@D2�STARTUP�FACTORY,�2016.11.12

Page 8: core.logic (Clojure)

제�5회�Lisp�seminar�@D2�STARTUP�FACTORY,�2016.11.12

1. 첫번째�빈�칸에�숫자�배치�

2. 조건�부합�여부�확인�

3. 다음�칸으로�이동하고�배치�

4. 반복

행,�열,�서브그리드에서�유일한�숫자인가

Page 9: core.logic (Clojure)

제�5회�Lisp�seminar�@D2�STARTUP�FACTORY,�2016.11.12

이렇게?

Page 10: core.logic (Clojure)

제�5회�Lisp�seminar�@D2�STARTUP�FACTORY,�2016.11.12

이렇게!

Page 11: core.logic (Clojure)

제�5회�Lisp�seminar�@D2�STARTUP�FACTORY,�2016.11.12

원리는�별�것�아닙니다

https://www.jug.ch/events/slides/140225_Clojure_gix.pdf�

Page 12: core.logic (Clojure)

제�5회�Lisp�seminar�@D2�STARTUP�FACTORY,�2016.11.12

Data�is�Code�is�Data

Page 13: core.logic (Clojure)

제�5회�Lisp�seminar�@D2�STARTUP�FACTORY,�2016.11.12

명령형��

vs.�

선언형,�제약조건형

Page 14: core.logic (Clojure)

제�5회�Lisp�seminar�@D2�STARTUP�FACTORY,�2016.11.12

명령형

Imperative Programming

The three keys needed...

logic key functional key imperative key

Page 15: core.logic (Clojure)

제�5회�Lisp�seminar�@D2�STARTUP�FACTORY,�2016.11.12

명령형

Page 16: core.logic (Clojure)

제�5회�Lisp�seminar�@D2�STARTUP�FACTORY,�2016.11.12

선언형(논리�프로그래밍)Logic Programming

Just one key is needed...

Magic

logic key

Page 17: core.logic (Clojure)

제�5회�Lisp�seminar�@D2�STARTUP�FACTORY,�2016.11.12

선언형(논리�프로그래밍)Logic Programming

Just one key is needed...

Magic

logic key

miniKanren

Page 18: core.logic (Clojure)

제�5회�Lisp�seminar�@D2�STARTUP�FACTORY,�2016.11.12

Page 19: core.logic (Clojure)

제�5회�Lisp�seminar�@D2�STARTUP�FACTORY,�2016.11.12

What is logic programming?

semantic elements

logic programming

querylogicvariable

free

grounded

knowledgebase

proposition

predicate

term

finitedomains

constraints

deduction

depth-firstsearch

backtracking

unificationinduction

satisfyingassignment

Page 20: core.logic (Clojure)

제�5회�Lisp�seminar�@D2�STARTUP�FACTORY,�2016.11.12

What is logic programming?

abstract ... concrete

logic programming

query knowledgebase

deductionsatisfyingassignment

In which year was julia twice as oldclodette?

julia was born 2 years before clodette

julia was born in 1978

age 2 N, 0 age 120year 2 N, 1978 age 2098

Page 21: core.logic (Clojure)

제�5회�Lisp�seminar�@D2�STARTUP�FACTORY,�2016.11.12

어떻게�생겨먹었나..�joy.logic.planets

http://bit.ly/2g4cfvV

Page 22: core.logic (Clojure)

제�5회�Lisp�seminar�@D2�STARTUP�FACTORY,�2016.11.12

Page 23: core.logic (Clojure)

제�5회�Lisp�seminar�@D2�STARTUP�FACTORY,�2016.11.12

http://lanyrd.com/2012/euroclojure/stfyd/�

Page 24: core.logic (Clojure)

제�5회�Lisp�seminar�@D2�STARTUP�FACTORY,�2016.11.12

Logic�Variable

?q

Page 25: core.logic (Clojure)

제�5회�Lisp�seminar�@D2�STARTUP�FACTORY,�2016.11.12

Fact

(relation�source�target)

개념상�그냥�제가�사용한�표현일�뿐,�

공식�표현이�아닙니다..

Page 26: core.logic (Clojure)

제�5회�Lisp�seminar�@D2�STARTUP�FACTORY,�2016.11.12

간단한�예

(run*�[q]�(conso�q�[]�[:a]))

Page 27: core.logic (Clojure)

제�5회�Lisp�seminar�@D2�STARTUP�FACTORY,�2016.11.12

(run*�[q]�(conso�q�[]�[:a]))

=>�(:a)

간단한�예

Page 28: core.logic (Clojure)

제�5회�Lisp�seminar�@D2�STARTUP�FACTORY,�2016.11.12

(run*�[q]�� (membero�q�[:a�:b�:c]))

정답이�여러개?

Page 29: core.logic (Clojure)

제�5회�Lisp�seminar�@D2�STARTUP�FACTORY,�2016.11.12

(run*�[q]�� (membero�q�[:a�:b�:c]))

=>�(:a�:b�:c)

정답이�여러개?

Page 30: core.logic (Clojure)

제�5회�Lisp�seminar�@D2�STARTUP�FACTORY,�2016.11.12

(run�1�[q]�� (membero�q�[:a�:b�:c]))

=>�(:a)

정답이�여러개?

Page 31: core.logic (Clojure)

제�5회�Lisp�seminar�@D2�STARTUP�FACTORY,�2016.11.12

(run*�[q]�(membero�:b�[:a�:b�:c]))

이건�뭐지?

Page 32: core.logic (Clojure)

제�5회�Lisp�seminar�@D2�STARTUP�FACTORY,�2016.11.12

(run*�[q]�(membero�:b�[:a�:b�:c]))

=>�(_0)

이건�뭐지?

Page 33: core.logic (Clojure)

제�5회�Lisp�seminar�@D2�STARTUP�FACTORY,�2016.11.12

(run*�[q]�(membero�:b�[:a�:b�:c])�(==�q�true))

=>�(true)

단일화(unification)

Page 34: core.logic (Clojure)

제�5회�Lisp�seminar�@D2�STARTUP�FACTORY,�2016.11.12

(run*�[q]�(membero�q�[:a�:b�:c])�(membero�q�[:b�:c�:d]))

조건이�여러개라면?

Page 35: core.logic (Clojure)

제�5회�Lisp�seminar�@D2�STARTUP�FACTORY,�2016.11.12

(run*�[q]�(membero�q�[:a�:b�:c])�(membero�q�[:b�:c�:d]))

=>�(:b�:c)

조건이�여러개라면?

Page 36: core.logic (Clojure)

제�5회�Lisp�seminar�@D2�STARTUP�FACTORY,�2016.11.12

(run*�[q]�(membero�q�[:a�:b�:c])�(membero�:a�[:b�:c�q]))

이런�것도�됩니다

Page 37: core.logic (Clojure)

제�5회�Lisp�seminar�@D2�STARTUP�FACTORY,�2016.11.12

(run*�[q]�(membero�q�[:a�:b�:c])�(membero�:a�[:b�:c�q]))

=>�(:a)

이런�것도�됩니다

Page 38: core.logic (Clojure)

제�5회�Lisp�seminar�@D2�STARTUP�FACTORY,�2016.11.12

스도쿠로�돌아와서

조건

단일화

논리변수�초기화

답은�한�개만!

Page 39: core.logic (Clojure)

제�5회�Lisp�seminar�@D2�STARTUP�FACTORY,�2016.11.12

실행해볼까요?�joy.logic.sdokufd

http://bit.ly/2eLT44W

Page 40: core.logic (Clojure)

제�5회�Lisp�seminar�@D2�STARTUP�FACTORY,�2016.11.12

그래서..�어디에�써먹나?�

(논리적?)�데이터베이스

Page 41: core.logic (Clojure)

제�5회�Lisp�seminar�@D2�STARTUP�FACTORY,�2016.11.12

SELECT * FROM GEEKS WHERE GEEK_ID=0;

geed_id geek_name

0 Archimedes

Tuesday, 22 May 2012

Page 42: core.logic (Clojure)

제�5회�Lisp�seminar�@D2�STARTUP�FACTORY,�2016.11.12

Page 43: core.logic (Clojure)

제�5회�Lisp�seminar�@D2�STARTUP�FACTORY,�2016.11.12

Datomic

Page 44: core.logic (Clojure)

제�5회�Lisp�seminar�@D2�STARTUP�FACTORY,�2016.11.12

Datomic�질의언어:�Datalog

https://en.wikipedia.org/wiki/Datalog�

Page 45: core.logic (Clojure)

제�5회�Lisp�seminar�@D2�STARTUP�FACTORY,�2016.11.12

Datalog

하둡기반�데이터�처리/질의

RDF�데이터�질의�프레임워크

Page 46: core.logic (Clojure)

제�5회�Lisp�seminar�@D2�STARTUP�FACTORY,�2016.11.12

감사합니다!

Facebook:�@ksseono�

Twitter:�@SeonhoKim