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

core.logic (Clojure)

Apr 16, 2017

Download

Technology

Seonho Kim
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
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