Download - core.logic (Clojure)
제�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