core.logic (Clojure)

Preview:

Citation preview

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

김선호

Clojure,��

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

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

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

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

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

Java에�비해�편리한

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

chap16.�

생각하는�프로그램

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

core.logic

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

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

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

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

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

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

4. 반복

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

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

이렇게?

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

이렇게!

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

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

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

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

Data�is�Code�is�Data

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

명령형��

vs.�

선언형,�제약조건형

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

명령형

Imperative Programming

The three keys needed...

logic key functional key imperative key

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

명령형

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

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

Just one key is needed...

Magic

logic key

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

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

Just one key is needed...

Magic

logic key

miniKanren

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

제�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

제�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

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

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

http://bit.ly/2g4cfvV

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

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

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

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

Logic�Variable

?q

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

Fact

(relation�source�target)

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

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

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

간단한�예

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

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

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

=>�(:a)

간단한�예

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

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

정답이�여러개?

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

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

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

정답이�여러개?

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

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

=>�(:a)

정답이�여러개?

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

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

이건�뭐지?

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

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

=>�(_0)

이건�뭐지?

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

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

=>�(true)

단일화(unification)

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

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

조건이�여러개라면?

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

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

=>�(:b�:c)

조건이�여러개라면?

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

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

이런�것도�됩니다

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

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

=>�(:a)

이런�것도�됩니다

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

스도쿠로�돌아와서

조건

단일화

논리변수�초기화

답은�한�개만!

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

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

http://bit.ly/2eLT44W

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

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

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

제�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

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

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

Datomic

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

Datomic�질의언어:�Datalog

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

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

Datalog

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

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

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

감사합니다!

Facebook:�@ksseono�

Twitter:�@SeonhoKim