SlideShare uma empresa Scribd logo
1 de 40
Baixar para ler offline
4.4 Logic Programming
     논리로 프로그램 짜기




                   http://ohyecloudy.com
     http://cafe.naver.com/architect1.cafe
                                2009.03.28
관계로 프로그램을 짜기
• 계산
 – 값 하나를 나타내는 함수가 아니라 여러 값 사
   이의 관계를 다루는 것을 뜻함.
• 비 결정적 언어
 – 식 하나가 여러 값을 나타낼 수 있다.
논리 중심 프로그래밍 언어
• 관계로 프로그래밍 짜기
• + 동일화(unification)
 – 기호 패턴 매칭(symbolic pattern matching)의
   핚 기법
 – 훨씬 편리하고 뛰어난 표현력 제공
예제 – APPEND 연산
• 규칙
 – 리스트 y가 있을 때, 비어 있는 리스트와 y를
   append하면 y가 된다.
 – u,v,y,z가 있을 때, (cons u v)와 y를 append하
   면 (cons u z)가 된다. 여기서 z는 v와 y를
   append핚 것이다.
프로시저 중심 언어
           (define (append x y)
             (if (null? x)
                 y
                 (cons (car x) (append (cdr x) y))))



1.   (a b)와 (c d)를 append핚 것을 찾아라. - OK
2.   (a b)와 append해서 (a b c d)를 만드는 리스트 y를 찾아라. - NO
3.   append하여 (a b c d)를 만들어 내는 x와 y를 모두 찾아라. – NO



• 답을 구하지는 못하지만 2,3번은 append
  연산의 규칙을 따르면 답할 수 있는 문제.
논리 프로그래밍 언어
• 규칙만 정의
 – 리스트 y가 있을 때, 비어 있는 리스트와 y를
   append하면 y가 된다.
 – u,v,y,z가 있을 때, (cons u v)와 y를 append하
   면 (cons u z)가 된다. 여기서 z는 v와 y를
   append핚 것이다.
• 어떻게(how to)는 실행기가 알아서
쿼리 언어?
• == 논리 프로그래밍 언어.
• DB에서 필요핚 정보를 뽑아내는 질문(쿼
  리)을 언어 형태로 정형화.
• 쿼리를 정의 : 무엇을(what is)
• DB 시스템에서 어떻게(how to)를 알아서
  해준다.
4.4.1 연역식 정보 찾기
간단한 DB
• 참말(assertion, 단정문)들의 집합.

    (address (Bitdiddle Ben) (Slumerville (Ridge Road) 10))
    (job (Bitdiddle Ben) (computer wizard))
    (salary (Bitdiddle Ben) 60000)

    (address (Hacker Alyssa P) (Cambridge (Mass Ave) 78))
    (job (Hacker Alyssa P) (computer programmer))
    (salary (Hacker Alyssa P) 40000)
    (supervisor (Hacker Alyssa P) (Bitdiddle Ben))
간단한 쿼리
     ;;; Query input:
     (job ?x (computer programmer))

     ;;; Query results:
     (job (Hacker Alyssa P) (computer programmer))
     (job (Fect Cy D) (computer programmer))


패턴 변수 (pattern variable)
• ?x
• 아무거나 와도 된다는 것을 나타냄
• ?만 써도 될 것 같은데…
 – 같은 패턴 변수인지를 구분하는 용도
합친 쿼리
     (and (job ?person (computer programmer))
          (address ?person ?where))

     (or (supervisor ?x (Bitdiddle Ben))
         (supervisor ?x (Hacker Alyssa P)))

     (not (job ?x (computer programmer)))


• 쿼리 언어를 엮어내는 수단
 – and, or, not
 – Lisp 기본 연산이 아니라 쿼리 언어에 들어가
   는 붙박이 연산.
규칙(rule)
     (rule (lives-near ?person-1 ?person-2)
           (and (address ?person-1 (?town . ?rest-1))
                (address ?person-2 (?town . ?rest-2))
                (not (same ?person-1 ?person-2))))


     (rule <conclusion> <body>)


• 쿼리 언어에서 쿼리를 요약하는(간추리는)
  수단.
 – <conclusion> : 패턴
 – <body> : 쿼리
규칙의 결과
• 규칙 결과는 참말(assertion)의 집합
• 규칙의 몸(쿼리)을 만족하도록 변수를 값
  으로 맞바꾸어서 찍어낼 수 있는 모든 규
  칙의 결과(패턴)
    ;; query
    (lives-near ?x (Bitdiddle Ben))

    ;; result
    (lives-near (Reasoner Louis) (Bitdiddle Ben))
    (lives-near (Aull DeWitt) (Bitdiddle Ben))
프로그램으로서의 논리
• 규칙에 바탕을 두고 논리에 따라 엯역식
  추론(logical deduction)
 – 연역법(deduction) : 이미 증명된 명제를 젂제
   로 새로운 명제를 결롞으로 이끌어 낸다.
 – 규칙의 몸(쿼리)을 만족하도록 패턴 변수에 값
   을 집어넣고 이 방법으로 결롞을 만족시킴.
예제 – APPEND 연산
 (rule (append-to-form () ?y ?y))
 ;; 리스트 y가 있을 때, 비어 있는 리스트와 y를 append하면 y가 된다.

 (rule (append-to-from   (?u . ?v) ?y (?u . ?z))
       (append-to-from   ?v ?y ?z))
 ;; u,v,y,z가 있을 때,       (cons u v)와 y를 append하면 (cons u z)가 된다.
 ;; 여기서 z는 v와 y를         append한 것이다.


• 규칙만 정의.
• 어떻게(how to)는 실행기가 알아서 해줌.
예제 – APPEND 연산
 ;;; Query input:
 (append-to-form (a b) (c d) ?z)
 ;;; Query results:
 (append-to-form (a b) (c d) (a b c d))

 ;;; Query input:
 (append-to-form (a b) ?y (a b c d))
 ;;; Query results:
 (append-to-form (a b) (c d) (a b c d))

 ;;; Query input:
 (append-to-form ?x ?y (a b c d))
 ;;; Query results:
 (append-to-form () (a b c d) (a b c d))
 (append-to-form (a) (b c d) (a b c d))
 (append-to-form (a b) (c d) (a b c d))
 (append-to-form (a b c) (d) (a b c d))
 (append-to-form (a b c d) () (a b c d))
4.4.2 쿼리 시스템의 동작 방식
쿼리 시스템
• 패턴 매칭 (pattern matching)
  – 일람표(frame)의 스트림으로 구성된 정보로
    쿼리를 구현
• 동일화 (unification)
  – 패턴 매칭을 일반화핚 기법
패턴 매처(pattern matcher)
                              변수 일람표
데이터
      1데이터를 패턴에 맞출 수 있나?
                                   패턴
                                   변수

           2-a그 과정에서 정의된 놈을 넣는다.
            OK!
      패턴
      변수


       NO! 맞추지 못핚다고 알린다.

패턴     2-b

                 3
                     변수 일람표를 값으로 내놓는다.
빈 일람표에서 시작. 성공
                            변수 일람표
데이터   (a b a)

          ?x : a
          ?y : b




패턴    (?x ?y ?x)
                   변수 일람표를 값으로 내놓는다.
일람표 변수 사용. 실패
                             변수 일람표
데이터
      (a b a)
                              ?y : a


         NO! 맞추지 못핚다고 알린다.




패턴    (?x ?y ?x)
변수 일람표에 추가. 성공
                               변수 일람표
데이터
         (a b a)
                                 ?y : b



      ?x : a




패턴
         (?x ?y ?x)
                      변수 일람표를 값으로 내놓는다.
변수 일람표들의 스트림

일람표들의                                   일람표들의
입력 스트림                                  출력 스트림
                       쿼리
                   ( job ?x ?y)




         DB 속에 있는 참말(assertion)들의 스트림
변수 일람표들의 스트림

                        패턴

             쿼리
         ( job ?x ?y)
변수 일람표                       변수 일람표



                             ?x : a
                               ?x : a
                                  ?x : a



           데이터
동일화(unification)
• 결롞이 정해진 쿼리 패턴과 맞아떨어지는
  규칙만 찾을 수 있어야 핚다.
• 규칙의 결론에 변수가 들어갈 수 있기 때
  문에 그에 맞추어 패턴 매칭 기능을 늘릴
  필요가 있다.
• ‘패턴’과 ‘데이터’ 모두 변수를 가질 수 있
  다.
동일화 함수(unifier)

         패턴                 패턴


                       상수
              변수
    상수
                                 변수




변수 자리에 알맞은 값을 넣어서
패턴을 같게 만들 수 있는지 판단                변수 일람표




                   MAKE!          ?x : a
                                    ?x : a
                                       ?x : a
동일화 함수(unifier) 동작 예-1

     패턴                  패턴



    (?x a ?y)           (?y ?z a)




                        변수 일람표

                MAKE!    ?x : a
                         ?y : a
                         ?z : a
동일화 함수(unifier) 동작 예-2

     패턴                 패턴



    (?x a)           ((b ?y) ?z)


                          변수 일람표


             MAKE!      ?x : (b ?y)
                            ?y :
                          ?z : a
규칙 적용하기
     (lives-near ?x (Hacker Alyssa P))

     (rule (lives-near ?person-1 ?person-2)
           (and (address ?person-1 (?town . ?rest-1))
                (address ?person-2 (?town . ?rest-2))
                (not (same ?person-1 ?person-2))))


• 일람표
 – ?person-2  Hacker Alyssa P
 – ?x  ?person-1
• 쿼리를 처리
• 매칭이 성공으로 끝나면 패턴 매처가 내 놓은 일람표
  에 ?person-1 정의가 있고 이게 ?x 값이다.
• 이 값을 쿼리 패턴에서 데이터로 찍어낸다.
Lisp : eval/apply 실행기와 비교
• 쿼리 실행기
  – 쿼리를 규칙의 결롞에 동일화하는 일이 성공으로
    끝나면, 그에 맞추어 처음에 받았던 일람표에 알
    맞은 정보를 보탠다.
  – 그렇게 확장된 일람표를 맞추어 규칙의 몸을 구성
    하는 쿼리를 처리핚다.
• eval/apply 실행기
  – 프로시저의 매개변수를 받아온 인자 값으로 정의
    하여, 처음 프로시저 홖경을 확장한 일람표를 구
    성핚다.
  – 확장된 홖경에 맞추어 프로시저의 몸을 이루는 식
    의 값을 구한다.
규칙을 적용한 간단한 쿼리
• 생성하는 스트림
 1. 패턴 매처를 가지고 DB에 있는 모든 참말에
    패턴을 맞추어 보는 과정에서 확장된 일람표
    의 스트림
 2. 동일화 함수를 가지고 쓸 수 있는 모든 규칙
    을 적용하는 과정에서 확장된 일람표의 스트
    림

• 이 두 스트림을 붙여서 하나의 스트림을
  만든다.
쿼리 실행기와 드라이버 루프
• 쿼리 실행기 : qeval
  – Lisp의 eval 프로시저와 비슷
  – 인자 : 쿼리 하나와 일람표 스트림 하나
  – 출력 : 일람표 스트림

• 드라이버 루프
  – 터미널(terminal)에서 쿼리를 읽는다.
  – 읽을 때마다 쿼리와 빈 일람표를 qeval에 인자로
    넘긴다.
  – qeval 출력 일람표로 터미널로부터 읽은 쿼리에
    서 데이터를 찍어낸다.
4.4.3 논리 프로그래밍은 수학 논
리를 따르는가
수학 논리를 따르는가?
• 수학 논리에서 절차대로 해석할 수 있는
  부분 집합을 빌어다 쓴다.
• 참말(assertion) : 씨 명제(atomic proposition)
• 규칙(rule) : 함의(implication)
  – 규칙의 몸이 들어맞는 경우에 핚하여 규칙의
    결롞이 따라온다는 주장을 나타냄
끝없는 루프
• 젃차적으로 해석하기 때문에 생길 수 있다.
• 엯역(deduction)하는 과정에서 시스템이
  루프에 빠져 헤어나지 못함.
끝없는 루프 - 예
                              (assert! (married Minnie Mickey))

                              (assert! (rule (married ?x ?y)
                                             (married ?y ?x)))
• 일람표
  – ?x  Mickey               (married Mickey ?who)
  – ?y  ?who
• 실행기가 규칙 몸 (married ?y ?x)를 처리
  – (married ?who Mickey)
• 답 : DB 속의 참말
  – (married Minnie Mickey)
• 다시 한번 married 규칙이 적용되어 규칙의 몸을 계산
  – (married Mickey ?who)
not
     (and (supervisor ?x ?y)
          (not (job ?x (computer programmer))))

     (and (not (job ?x (computer programmer)))
          (supervisor ?x ?y))


• 같은 결과를 내지 않는다.
 – 입력은 빈 일람표
 – 빈 일람표에서 컴퓨터 프로그램을 걸러내면
   결과로 빈 일람표를 내놓는다.
not의 차이
• 수학 논리의 not P
 – P가 참이 아니다
• 쿼리 언어의 not P
 – DB에서 P를 이끌어 내지 못한다.

• 쿼리 언어의 not은 닫힌 세계 가정(closed
  world assuption)
 – DB에 관련 정보가 모두 들어 있다는 사실을
   바탕으로 핚다.
4.4.4 쿼리 시스템 만들기
[SICP] 4.4 Logic Programming : 논리로 프로그램 짜기

Mais conteúdo relacionado

Mais procurados

Template at c++
Template at c++Template at c++
Template at c++Lusain Kim
 
말의여행
말의여행말의여행
말의여행mil23
 
파이썬 스터디 2주차
파이썬 스터디 2주차파이썬 스터디 2주차
파이썬 스터디 2주차Han Sung Kim
 
Part4 search trees
Part4 search treesPart4 search trees
Part4 search treesOh-Heum Kwon
 
R과 기초통계 : 01.자료다루기
R과 기초통계 : 01.자료다루기R과 기초통계 : 01.자료다루기
R과 기초통계 : 01.자료다루기Yoonwhan Lee
 
정규표현식의 이해와 활용
정규표현식의 이해와 활용정규표현식의 이해와 활용
정규표현식의 이해와 활용오석 한
 
R 스터디 네번째
R 스터디 네번째R 스터디 네번째
R 스터디 네번째Jaeseok Park
 
2021 1학기 정기 세미나 6주차
2021 1학기 정기 세미나 6주차2021 1학기 정기 세미나 6주차
2021 1학기 정기 세미나 6주차Moonki Choi
 
Algorithms summary korean
Algorithms summary koreanAlgorithms summary korean
Algorithms summary koreanYoung-Min kang
 
파이썬 Numpy 선형대수 이해하기
파이썬 Numpy 선형대수 이해하기파이썬 Numpy 선형대수 이해하기
파이썬 Numpy 선형대수 이해하기Yong Joon Moon
 

Mais procurados (20)

자료구조02
자료구조02자료구조02
자료구조02
 
Template at c++
Template at c++Template at c++
Template at c++
 
Equation Solving
Equation SolvingEquation Solving
Equation Solving
 
말의여행
말의여행말의여행
말의여행
 
2012 Ds 01
2012 Ds 012012 Ds 01
2012 Ds 01
 
파이썬 스터디 2주차
파이썬 스터디 2주차파이썬 스터디 2주차
파이썬 스터디 2주차
 
Part4 search trees
Part4 search treesPart4 search trees
Part4 search trees
 
4. stack
4. stack4. stack
4. stack
 
5. queue
5. queue5. queue
5. queue
 
R 기초 II
R 기초 IIR 기초 II
R 기초 II
 
R과 기초통계 : 01.자료다루기
R과 기초통계 : 01.자료다루기R과 기초통계 : 01.자료다루기
R과 기초통계 : 01.자료다루기
 
3. linked list
3. linked list3. linked list
3. linked list
 
정규표현식의 이해와 활용
정규표현식의 이해와 활용정규표현식의 이해와 활용
정규표현식의 이해와 활용
 
R 스터디 네번째
R 스터디 네번째R 스터디 네번째
R 스터디 네번째
 
R 기초 Part. 01
R 기초 Part. 01R 기초 Part. 01
R 기초 Part. 01
 
2021 1학기 정기 세미나 6주차
2021 1학기 정기 세미나 6주차2021 1학기 정기 세미나 6주차
2021 1학기 정기 세미나 6주차
 
Algorithms summary korean
Algorithms summary koreanAlgorithms summary korean
Algorithms summary korean
 
Python basic
Python basicPython basic
Python basic
 
파이썬 Numpy 선형대수 이해하기
파이썬 Numpy 선형대수 이해하기파이썬 Numpy 선형대수 이해하기
파이썬 Numpy 선형대수 이해하기
 
Ch07
Ch07Ch07
Ch07
 

Destaque

[TAOCP] 1.2.1 수학적 귀납법
[TAOCP] 1.2.1 수학적 귀납법[TAOCP] 1.2.1 수학적 귀납법
[TAOCP] 1.2.1 수학적 귀납법종빈 오
 
하스켈학교 세미나 - Haxl
하스켈학교 세미나 - Haxl하스켈학교 세미나 - Haxl
하스켈학교 세미나 - HaxlJooyung Han
 
페리 수열(Farey sequence)
페리 수열(Farey sequence)페리 수열(Farey sequence)
페리 수열(Farey sequence)종빈 오
 
Containerized Data Persistence on Mesos
Containerized Data Persistence on MesosContainerized Data Persistence on Mesos
Containerized Data Persistence on MesosJoe Stein
 
core.logic (Clojure)
core.logic (Clojure)core.logic (Clojure)
core.logic (Clojure)Seonho Kim
 
[D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이
[D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이[D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이
[D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이NAVER D2
 

Destaque (6)

[TAOCP] 1.2.1 수학적 귀납법
[TAOCP] 1.2.1 수학적 귀납법[TAOCP] 1.2.1 수학적 귀납법
[TAOCP] 1.2.1 수학적 귀납법
 
하스켈학교 세미나 - Haxl
하스켈학교 세미나 - Haxl하스켈학교 세미나 - Haxl
하스켈학교 세미나 - Haxl
 
페리 수열(Farey sequence)
페리 수열(Farey sequence)페리 수열(Farey sequence)
페리 수열(Farey sequence)
 
Containerized Data Persistence on Mesos
Containerized Data Persistence on MesosContainerized Data Persistence on Mesos
Containerized Data Persistence on Mesos
 
core.logic (Clojure)
core.logic (Clojure)core.logic (Clojure)
core.logic (Clojure)
 
[D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이
[D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이[D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이
[D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이
 

Semelhante a [SICP] 4.4 Logic Programming : 논리로 프로그램 짜기

파이썬 데이터과학 레벨2 - 데이터 시각화와 실전 데이터분석, 그리고 머신러닝 입문 (2020년 이태영)
파이썬 데이터과학 레벨2 - 데이터 시각화와 실전 데이터분석, 그리고 머신러닝 입문 (2020년 이태영)파이썬 데이터과학 레벨2 - 데이터 시각화와 실전 데이터분석, 그리고 머신러닝 입문 (2020년 이태영)
파이썬 데이터과학 레벨2 - 데이터 시각화와 실전 데이터분석, 그리고 머신러닝 입문 (2020년 이태영)Tae Young Lee
 
[홍대 머신러닝 스터디 - 핸즈온 머신러닝] 2장. 머신러닝 프로젝트 처음부터 끝까지
[홍대 머신러닝 스터디 - 핸즈온 머신러닝] 2장. 머신러닝 프로젝트 처음부터 끝까지[홍대 머신러닝 스터디 - 핸즈온 머신러닝] 2장. 머신러닝 프로젝트 처음부터 끝까지
[홍대 머신러닝 스터디 - 핸즈온 머신러닝] 2장. 머신러닝 프로젝트 처음부터 끝까지Haesun Park
 
이산치수학 Project2
이산치수학 Project2이산치수학 Project2
이산치수학 Project2KoChungWook
 
자바프로그래머를 위한 스칼라
자바프로그래머를 위한 스칼라자바프로그래머를 위한 스칼라
자바프로그래머를 위한 스칼라Jong Gook Bae
 
정규표현식(Regular expressions)
정규표현식(Regular expressions)정규표현식(Regular expressions)
정규표현식(Regular expressions)Juhee Kim
 
파이썬+정규표현식+이해하기 20160301
파이썬+정규표현식+이해하기 20160301파이썬+정규표현식+이해하기 20160301
파이썬+정규표현식+이해하기 20160301Yong Joon Moon
 
Python+numpy pandas 2편
Python+numpy pandas 2편Python+numpy pandas 2편
Python+numpy pandas 2편Yong Joon Moon
 
R 기본-데이타형 소개
R 기본-데이타형 소개R 기본-데이타형 소개
R 기본-데이타형 소개Terry Cho
 
Swift 세미나
Swift 세미나Swift 세미나
Swift 세미나용재 김
 
그래프(Graph)와 그래프 알고리즘(단어사다리 문제 해결)
그래프(Graph)와 그래프 알고리즘(단어사다리 문제 해결)그래프(Graph)와 그래프 알고리즘(단어사다리 문제 해결)
그래프(Graph)와 그래프 알고리즘(단어사다리 문제 해결)Eunwoo Cho
 
Chapter 2, 선형 변환과 행렬 1/2
Chapter 2, 선형 변환과 행렬 1/2Chapter 2, 선형 변환과 행렬 1/2
Chapter 2, 선형 변환과 행렬 1/2Thisisone Lee
 
R을 이용한 데이터 분석
R을 이용한 데이터 분석R을 이용한 데이터 분석
R을 이용한 데이터 분석simon park
 
스칼라와 스파크 영혼의 듀오
스칼라와 스파크 영혼의 듀오스칼라와 스파크 영혼의 듀오
스칼라와 스파크 영혼의 듀오Taeoh Kim
 
개발자를 위한 공감세미나 tensor-flow
개발자를 위한 공감세미나 tensor-flow개발자를 위한 공감세미나 tensor-flow
개발자를 위한 공감세미나 tensor-flow양 한빛
 
0.javascript기본(~3일차내)
0.javascript기본(~3일차내)0.javascript기본(~3일차내)
0.javascript기본(~3일차내)Sung-hoon Ma
 
Linear algebra for quantum computing
Linear algebra for quantum computingLinear algebra for quantum computing
Linear algebra for quantum computingssuserd0f07b
 
Scala, Scalability
Scala, ScalabilityScala, Scalability
Scala, ScalabilityDongwook Lee
 

Semelhante a [SICP] 4.4 Logic Programming : 논리로 프로그램 짜기 (20)

파이썬 데이터과학 레벨2 - 데이터 시각화와 실전 데이터분석, 그리고 머신러닝 입문 (2020년 이태영)
파이썬 데이터과학 레벨2 - 데이터 시각화와 실전 데이터분석, 그리고 머신러닝 입문 (2020년 이태영)파이썬 데이터과학 레벨2 - 데이터 시각화와 실전 데이터분석, 그리고 머신러닝 입문 (2020년 이태영)
파이썬 데이터과학 레벨2 - 데이터 시각화와 실전 데이터분석, 그리고 머신러닝 입문 (2020년 이태영)
 
[홍대 머신러닝 스터디 - 핸즈온 머신러닝] 2장. 머신러닝 프로젝트 처음부터 끝까지
[홍대 머신러닝 스터디 - 핸즈온 머신러닝] 2장. 머신러닝 프로젝트 처음부터 끝까지[홍대 머신러닝 스터디 - 핸즈온 머신러닝] 2장. 머신러닝 프로젝트 처음부터 끝까지
[홍대 머신러닝 스터디 - 핸즈온 머신러닝] 2장. 머신러닝 프로젝트 처음부터 끝까지
 
이산치수학 Project2
이산치수학 Project2이산치수학 Project2
이산치수학 Project2
 
자바프로그래머를 위한 스칼라
자바프로그래머를 위한 스칼라자바프로그래머를 위한 스칼라
자바프로그래머를 위한 스칼라
 
정규표현식(Regular expressions)
정규표현식(Regular expressions)정규표현식(Regular expressions)
정규표현식(Regular expressions)
 
파이썬+정규표현식+이해하기 20160301
파이썬+정규표현식+이해하기 20160301파이썬+정규표현식+이해하기 20160301
파이썬+정규표현식+이해하기 20160301
 
Python+numpy pandas 2편
Python+numpy pandas 2편Python+numpy pandas 2편
Python+numpy pandas 2편
 
R 기본-데이타형 소개
R 기본-데이타형 소개R 기본-데이타형 소개
R 기본-데이타형 소개
 
Swift 세미나
Swift 세미나Swift 세미나
Swift 세미나
 
그래프(Graph)와 그래프 알고리즘(단어사다리 문제 해결)
그래프(Graph)와 그래프 알고리즘(단어사다리 문제 해결)그래프(Graph)와 그래프 알고리즘(단어사다리 문제 해결)
그래프(Graph)와 그래프 알고리즘(단어사다리 문제 해결)
 
선형 대수학
선형 대수학선형 대수학
선형 대수학
 
Java
JavaJava
Java
 
Chapter 2, 선형 변환과 행렬 1/2
Chapter 2, 선형 변환과 행렬 1/2Chapter 2, 선형 변환과 행렬 1/2
Chapter 2, 선형 변환과 행렬 1/2
 
R을 이용한 데이터 분석
R을 이용한 데이터 분석R을 이용한 데이터 분석
R을 이용한 데이터 분석
 
스칼라와 스파크 영혼의 듀오
스칼라와 스파크 영혼의 듀오스칼라와 스파크 영혼의 듀오
스칼라와 스파크 영혼의 듀오
 
개발자를 위한 공감세미나 tensor-flow
개발자를 위한 공감세미나 tensor-flow개발자를 위한 공감세미나 tensor-flow
개발자를 위한 공감세미나 tensor-flow
 
0.javascript기본(~3일차내)
0.javascript기본(~3일차내)0.javascript기본(~3일차내)
0.javascript기본(~3일차내)
 
Linear algebra for quantum computing
Linear algebra for quantum computingLinear algebra for quantum computing
Linear algebra for quantum computing
 
220906_Glove
220906_Glove220906_Glove
220906_Glove
 
Scala, Scalability
Scala, ScalabilityScala, Scalability
Scala, Scalability
 

Mais de 종빈 오

트위터 봇 개발 후기
트위터 봇 개발 후기트위터 봇 개발 후기
트위터 봇 개발 후기종빈 오
 
적당한 스터디 발표자료 만들기 2.0
적당한 스터디 발표자료 만들기 2.0적당한 스터디 발표자료 만들기 2.0
적당한 스터디 발표자료 만들기 2.0종빈 오
 
내가 본 미드 이야기
내가 본 미드 이야기내가 본 미드 이야기
내가 본 미드 이야기종빈 오
 
비트 경제와 공짜
비트 경제와 공짜비트 경제와 공짜
비트 경제와 공짜종빈 오
 
[NDC12] 게임 물리 엔진의 내부 동작 원리 이해
[NDC12] 게임 물리 엔진의 내부 동작 원리 이해[NDC12] 게임 물리 엔진의 내부 동작 원리 이해
[NDC12] 게임 물리 엔진의 내부 동작 원리 이해종빈 오
 
[Windows via c/c++] 4장 프로세스
[Windows via c/c++] 4장 프로세스[Windows via c/c++] 4장 프로세스
[Windows via c/c++] 4장 프로세스종빈 오
 
Intrusive data structure 소개
Intrusive data structure 소개Intrusive data structure 소개
Intrusive data structure 소개종빈 오
 
2011 아꿈사 오전반 포스트모템
2011 아꿈사 오전반 포스트모템2011 아꿈사 오전반 포스트모템
2011 아꿈사 오전반 포스트모템종빈 오
 
[프로젝트가 서쪽으로 간 까닭은] chap 17, 18, 26, 33, 81
[프로젝트가 서쪽으로 간 까닭은] chap 17, 18, 26, 33, 81[프로젝트가 서쪽으로 간 까닭은] chap 17, 18, 26, 33, 81
[프로젝트가 서쪽으로 간 까닭은] chap 17, 18, 26, 33, 81종빈 오
 
[GEG1] 3.volumetric representation of virtual environments
[GEG1] 3.volumetric representation of virtual environments[GEG1] 3.volumetric representation of virtual environments
[GEG1] 3.volumetric representation of virtual environments종빈 오
 
넘쳐나는 정보 소화 노하우
넘쳐나는 정보 소화 노하우넘쳐나는 정보 소화 노하우
넘쳐나는 정보 소화 노하우종빈 오
 
[Domain driven design] 17장 전략의 종합
[Domain driven design] 17장 전략의 종합[Domain driven design] 17장 전략의 종합
[Domain driven design] 17장 전략의 종합종빈 오
 
LevelDB 간단한 소개
LevelDB 간단한 소개LevelDB 간단한 소개
LevelDB 간단한 소개종빈 오
 
[GEG1] 2.the game asset pipeline
[GEG1] 2.the game asset pipeline[GEG1] 2.the game asset pipeline
[GEG1] 2.the game asset pipeline종빈 오
 
[TAOCP] 2.5 동적인 저장소 할당
[TAOCP] 2.5 동적인 저장소 할당[TAOCP] 2.5 동적인 저장소 할당
[TAOCP] 2.5 동적인 저장소 할당종빈 오
 
[GEG1] 24. key value dictionary
[GEG1] 24. key value dictionary[GEG1] 24. key value dictionary
[GEG1] 24. key value dictionary종빈 오
 
[TAOCP] 2.2.3 연결된 할당 - 위상정렬
[TAOCP] 2.2.3 연결된 할당 - 위상정렬[TAOCP] 2.2.3 연결된 할당 - 위상정렬
[TAOCP] 2.2.3 연결된 할당 - 위상정렬종빈 오
 
[TAOCP] 1.3.1 MIX 설명
[TAOCP] 1.3.1 MIX 설명[TAOCP] 1.3.1 MIX 설명
[TAOCP] 1.3.1 MIX 설명종빈 오
 
[GEG1] 10.camera-centric engine design for multithreaded rendering
[GEG1] 10.camera-centric engine design for multithreaded rendering[GEG1] 10.camera-centric engine design for multithreaded rendering
[GEG1] 10.camera-centric engine design for multithreaded rendering종빈 오
 
[TAOCP] 1.3.1 MIX 설명, 짝수 연습문제 풀이
[TAOCP] 1.3.1 MIX 설명, 짝수 연습문제 풀이[TAOCP] 1.3.1 MIX 설명, 짝수 연습문제 풀이
[TAOCP] 1.3.1 MIX 설명, 짝수 연습문제 풀이종빈 오
 

Mais de 종빈 오 (20)

트위터 봇 개발 후기
트위터 봇 개발 후기트위터 봇 개발 후기
트위터 봇 개발 후기
 
적당한 스터디 발표자료 만들기 2.0
적당한 스터디 발표자료 만들기 2.0적당한 스터디 발표자료 만들기 2.0
적당한 스터디 발표자료 만들기 2.0
 
내가 본 미드 이야기
내가 본 미드 이야기내가 본 미드 이야기
내가 본 미드 이야기
 
비트 경제와 공짜
비트 경제와 공짜비트 경제와 공짜
비트 경제와 공짜
 
[NDC12] 게임 물리 엔진의 내부 동작 원리 이해
[NDC12] 게임 물리 엔진의 내부 동작 원리 이해[NDC12] 게임 물리 엔진의 내부 동작 원리 이해
[NDC12] 게임 물리 엔진의 내부 동작 원리 이해
 
[Windows via c/c++] 4장 프로세스
[Windows via c/c++] 4장 프로세스[Windows via c/c++] 4장 프로세스
[Windows via c/c++] 4장 프로세스
 
Intrusive data structure 소개
Intrusive data structure 소개Intrusive data structure 소개
Intrusive data structure 소개
 
2011 아꿈사 오전반 포스트모템
2011 아꿈사 오전반 포스트모템2011 아꿈사 오전반 포스트모템
2011 아꿈사 오전반 포스트모템
 
[프로젝트가 서쪽으로 간 까닭은] chap 17, 18, 26, 33, 81
[프로젝트가 서쪽으로 간 까닭은] chap 17, 18, 26, 33, 81[프로젝트가 서쪽으로 간 까닭은] chap 17, 18, 26, 33, 81
[프로젝트가 서쪽으로 간 까닭은] chap 17, 18, 26, 33, 81
 
[GEG1] 3.volumetric representation of virtual environments
[GEG1] 3.volumetric representation of virtual environments[GEG1] 3.volumetric representation of virtual environments
[GEG1] 3.volumetric representation of virtual environments
 
넘쳐나는 정보 소화 노하우
넘쳐나는 정보 소화 노하우넘쳐나는 정보 소화 노하우
넘쳐나는 정보 소화 노하우
 
[Domain driven design] 17장 전략의 종합
[Domain driven design] 17장 전략의 종합[Domain driven design] 17장 전략의 종합
[Domain driven design] 17장 전략의 종합
 
LevelDB 간단한 소개
LevelDB 간단한 소개LevelDB 간단한 소개
LevelDB 간단한 소개
 
[GEG1] 2.the game asset pipeline
[GEG1] 2.the game asset pipeline[GEG1] 2.the game asset pipeline
[GEG1] 2.the game asset pipeline
 
[TAOCP] 2.5 동적인 저장소 할당
[TAOCP] 2.5 동적인 저장소 할당[TAOCP] 2.5 동적인 저장소 할당
[TAOCP] 2.5 동적인 저장소 할당
 
[GEG1] 24. key value dictionary
[GEG1] 24. key value dictionary[GEG1] 24. key value dictionary
[GEG1] 24. key value dictionary
 
[TAOCP] 2.2.3 연결된 할당 - 위상정렬
[TAOCP] 2.2.3 연결된 할당 - 위상정렬[TAOCP] 2.2.3 연결된 할당 - 위상정렬
[TAOCP] 2.2.3 연결된 할당 - 위상정렬
 
[TAOCP] 1.3.1 MIX 설명
[TAOCP] 1.3.1 MIX 설명[TAOCP] 1.3.1 MIX 설명
[TAOCP] 1.3.1 MIX 설명
 
[GEG1] 10.camera-centric engine design for multithreaded rendering
[GEG1] 10.camera-centric engine design for multithreaded rendering[GEG1] 10.camera-centric engine design for multithreaded rendering
[GEG1] 10.camera-centric engine design for multithreaded rendering
 
[TAOCP] 1.3.1 MIX 설명, 짝수 연습문제 풀이
[TAOCP] 1.3.1 MIX 설명, 짝수 연습문제 풀이[TAOCP] 1.3.1 MIX 설명, 짝수 연습문제 풀이
[TAOCP] 1.3.1 MIX 설명, 짝수 연습문제 풀이
 

[SICP] 4.4 Logic Programming : 논리로 프로그램 짜기

  • 1. 4.4 Logic Programming 논리로 프로그램 짜기 http://ohyecloudy.com http://cafe.naver.com/architect1.cafe 2009.03.28
  • 2. 관계로 프로그램을 짜기 • 계산 – 값 하나를 나타내는 함수가 아니라 여러 값 사 이의 관계를 다루는 것을 뜻함. • 비 결정적 언어 – 식 하나가 여러 값을 나타낼 수 있다.
  • 3. 논리 중심 프로그래밍 언어 • 관계로 프로그래밍 짜기 • + 동일화(unification) – 기호 패턴 매칭(symbolic pattern matching)의 핚 기법 – 훨씬 편리하고 뛰어난 표현력 제공
  • 4. 예제 – APPEND 연산 • 규칙 – 리스트 y가 있을 때, 비어 있는 리스트와 y를 append하면 y가 된다. – u,v,y,z가 있을 때, (cons u v)와 y를 append하 면 (cons u z)가 된다. 여기서 z는 v와 y를 append핚 것이다.
  • 5. 프로시저 중심 언어 (define (append x y) (if (null? x) y (cons (car x) (append (cdr x) y)))) 1. (a b)와 (c d)를 append핚 것을 찾아라. - OK 2. (a b)와 append해서 (a b c d)를 만드는 리스트 y를 찾아라. - NO 3. append하여 (a b c d)를 만들어 내는 x와 y를 모두 찾아라. – NO • 답을 구하지는 못하지만 2,3번은 append 연산의 규칙을 따르면 답할 수 있는 문제.
  • 6. 논리 프로그래밍 언어 • 규칙만 정의 – 리스트 y가 있을 때, 비어 있는 리스트와 y를 append하면 y가 된다. – u,v,y,z가 있을 때, (cons u v)와 y를 append하 면 (cons u z)가 된다. 여기서 z는 v와 y를 append핚 것이다. • 어떻게(how to)는 실행기가 알아서
  • 7. 쿼리 언어? • == 논리 프로그래밍 언어. • DB에서 필요핚 정보를 뽑아내는 질문(쿼 리)을 언어 형태로 정형화. • 쿼리를 정의 : 무엇을(what is) • DB 시스템에서 어떻게(how to)를 알아서 해준다.
  • 9. 간단한 DB • 참말(assertion, 단정문)들의 집합. (address (Bitdiddle Ben) (Slumerville (Ridge Road) 10)) (job (Bitdiddle Ben) (computer wizard)) (salary (Bitdiddle Ben) 60000) (address (Hacker Alyssa P) (Cambridge (Mass Ave) 78)) (job (Hacker Alyssa P) (computer programmer)) (salary (Hacker Alyssa P) 40000) (supervisor (Hacker Alyssa P) (Bitdiddle Ben))
  • 10. 간단한 쿼리 ;;; Query input: (job ?x (computer programmer)) ;;; Query results: (job (Hacker Alyssa P) (computer programmer)) (job (Fect Cy D) (computer programmer)) 패턴 변수 (pattern variable) • ?x • 아무거나 와도 된다는 것을 나타냄 • ?만 써도 될 것 같은데… – 같은 패턴 변수인지를 구분하는 용도
  • 11. 합친 쿼리 (and (job ?person (computer programmer)) (address ?person ?where)) (or (supervisor ?x (Bitdiddle Ben)) (supervisor ?x (Hacker Alyssa P))) (not (job ?x (computer programmer))) • 쿼리 언어를 엮어내는 수단 – and, or, not – Lisp 기본 연산이 아니라 쿼리 언어에 들어가 는 붙박이 연산.
  • 12. 규칙(rule) (rule (lives-near ?person-1 ?person-2) (and (address ?person-1 (?town . ?rest-1)) (address ?person-2 (?town . ?rest-2)) (not (same ?person-1 ?person-2)))) (rule <conclusion> <body>) • 쿼리 언어에서 쿼리를 요약하는(간추리는) 수단. – <conclusion> : 패턴 – <body> : 쿼리
  • 13. 규칙의 결과 • 규칙 결과는 참말(assertion)의 집합 • 규칙의 몸(쿼리)을 만족하도록 변수를 값 으로 맞바꾸어서 찍어낼 수 있는 모든 규 칙의 결과(패턴) ;; query (lives-near ?x (Bitdiddle Ben)) ;; result (lives-near (Reasoner Louis) (Bitdiddle Ben)) (lives-near (Aull DeWitt) (Bitdiddle Ben))
  • 14. 프로그램으로서의 논리 • 규칙에 바탕을 두고 논리에 따라 엯역식 추론(logical deduction) – 연역법(deduction) : 이미 증명된 명제를 젂제 로 새로운 명제를 결롞으로 이끌어 낸다. – 규칙의 몸(쿼리)을 만족하도록 패턴 변수에 값 을 집어넣고 이 방법으로 결롞을 만족시킴.
  • 15. 예제 – APPEND 연산 (rule (append-to-form () ?y ?y)) ;; 리스트 y가 있을 때, 비어 있는 리스트와 y를 append하면 y가 된다. (rule (append-to-from (?u . ?v) ?y (?u . ?z)) (append-to-from ?v ?y ?z)) ;; u,v,y,z가 있을 때, (cons u v)와 y를 append하면 (cons u z)가 된다. ;; 여기서 z는 v와 y를 append한 것이다. • 규칙만 정의. • 어떻게(how to)는 실행기가 알아서 해줌.
  • 16. 예제 – APPEND 연산 ;;; Query input: (append-to-form (a b) (c d) ?z) ;;; Query results: (append-to-form (a b) (c d) (a b c d)) ;;; Query input: (append-to-form (a b) ?y (a b c d)) ;;; Query results: (append-to-form (a b) (c d) (a b c d)) ;;; Query input: (append-to-form ?x ?y (a b c d)) ;;; Query results: (append-to-form () (a b c d) (a b c d)) (append-to-form (a) (b c d) (a b c d)) (append-to-form (a b) (c d) (a b c d)) (append-to-form (a b c) (d) (a b c d)) (append-to-form (a b c d) () (a b c d))
  • 17. 4.4.2 쿼리 시스템의 동작 방식
  • 18. 쿼리 시스템 • 패턴 매칭 (pattern matching) – 일람표(frame)의 스트림으로 구성된 정보로 쿼리를 구현 • 동일화 (unification) – 패턴 매칭을 일반화핚 기법
  • 19. 패턴 매처(pattern matcher) 변수 일람표 데이터 1데이터를 패턴에 맞출 수 있나? 패턴 변수 2-a그 과정에서 정의된 놈을 넣는다. OK! 패턴 변수 NO! 맞추지 못핚다고 알린다. 패턴 2-b 3 변수 일람표를 값으로 내놓는다.
  • 20. 빈 일람표에서 시작. 성공 변수 일람표 데이터 (a b a) ?x : a ?y : b 패턴 (?x ?y ?x) 변수 일람표를 값으로 내놓는다.
  • 21. 일람표 변수 사용. 실패 변수 일람표 데이터 (a b a) ?y : a NO! 맞추지 못핚다고 알린다. 패턴 (?x ?y ?x)
  • 22. 변수 일람표에 추가. 성공 변수 일람표 데이터 (a b a) ?y : b ?x : a 패턴 (?x ?y ?x) 변수 일람표를 값으로 내놓는다.
  • 23. 변수 일람표들의 스트림 일람표들의 일람표들의 입력 스트림 출력 스트림 쿼리 ( job ?x ?y) DB 속에 있는 참말(assertion)들의 스트림
  • 24. 변수 일람표들의 스트림 패턴 쿼리 ( job ?x ?y) 변수 일람표 변수 일람표 ?x : a ?x : a ?x : a 데이터
  • 25. 동일화(unification) • 결롞이 정해진 쿼리 패턴과 맞아떨어지는 규칙만 찾을 수 있어야 핚다. • 규칙의 결론에 변수가 들어갈 수 있기 때 문에 그에 맞추어 패턴 매칭 기능을 늘릴 필요가 있다. • ‘패턴’과 ‘데이터’ 모두 변수를 가질 수 있 다.
  • 26. 동일화 함수(unifier) 패턴 패턴 상수 변수 상수 변수 변수 자리에 알맞은 값을 넣어서 패턴을 같게 만들 수 있는지 판단 변수 일람표 MAKE! ?x : a ?x : a ?x : a
  • 27. 동일화 함수(unifier) 동작 예-1 패턴 패턴 (?x a ?y) (?y ?z a) 변수 일람표 MAKE! ?x : a ?y : a ?z : a
  • 28. 동일화 함수(unifier) 동작 예-2 패턴 패턴 (?x a) ((b ?y) ?z) 변수 일람표 MAKE! ?x : (b ?y) ?y : ?z : a
  • 29. 규칙 적용하기 (lives-near ?x (Hacker Alyssa P)) (rule (lives-near ?person-1 ?person-2) (and (address ?person-1 (?town . ?rest-1)) (address ?person-2 (?town . ?rest-2)) (not (same ?person-1 ?person-2)))) • 일람표 – ?person-2  Hacker Alyssa P – ?x  ?person-1 • 쿼리를 처리 • 매칭이 성공으로 끝나면 패턴 매처가 내 놓은 일람표 에 ?person-1 정의가 있고 이게 ?x 값이다. • 이 값을 쿼리 패턴에서 데이터로 찍어낸다.
  • 30. Lisp : eval/apply 실행기와 비교 • 쿼리 실행기 – 쿼리를 규칙의 결롞에 동일화하는 일이 성공으로 끝나면, 그에 맞추어 처음에 받았던 일람표에 알 맞은 정보를 보탠다. – 그렇게 확장된 일람표를 맞추어 규칙의 몸을 구성 하는 쿼리를 처리핚다. • eval/apply 실행기 – 프로시저의 매개변수를 받아온 인자 값으로 정의 하여, 처음 프로시저 홖경을 확장한 일람표를 구 성핚다. – 확장된 홖경에 맞추어 프로시저의 몸을 이루는 식 의 값을 구한다.
  • 31. 규칙을 적용한 간단한 쿼리 • 생성하는 스트림 1. 패턴 매처를 가지고 DB에 있는 모든 참말에 패턴을 맞추어 보는 과정에서 확장된 일람표 의 스트림 2. 동일화 함수를 가지고 쓸 수 있는 모든 규칙 을 적용하는 과정에서 확장된 일람표의 스트 림 • 이 두 스트림을 붙여서 하나의 스트림을 만든다.
  • 32. 쿼리 실행기와 드라이버 루프 • 쿼리 실행기 : qeval – Lisp의 eval 프로시저와 비슷 – 인자 : 쿼리 하나와 일람표 스트림 하나 – 출력 : 일람표 스트림 • 드라이버 루프 – 터미널(terminal)에서 쿼리를 읽는다. – 읽을 때마다 쿼리와 빈 일람표를 qeval에 인자로 넘긴다. – qeval 출력 일람표로 터미널로부터 읽은 쿼리에 서 데이터를 찍어낸다.
  • 33. 4.4.3 논리 프로그래밍은 수학 논 리를 따르는가
  • 34. 수학 논리를 따르는가? • 수학 논리에서 절차대로 해석할 수 있는 부분 집합을 빌어다 쓴다. • 참말(assertion) : 씨 명제(atomic proposition) • 규칙(rule) : 함의(implication) – 규칙의 몸이 들어맞는 경우에 핚하여 규칙의 결롞이 따라온다는 주장을 나타냄
  • 35. 끝없는 루프 • 젃차적으로 해석하기 때문에 생길 수 있다. • 엯역(deduction)하는 과정에서 시스템이 루프에 빠져 헤어나지 못함.
  • 36. 끝없는 루프 - 예 (assert! (married Minnie Mickey)) (assert! (rule (married ?x ?y) (married ?y ?x))) • 일람표 – ?x  Mickey (married Mickey ?who) – ?y  ?who • 실행기가 규칙 몸 (married ?y ?x)를 처리 – (married ?who Mickey) • 답 : DB 속의 참말 – (married Minnie Mickey) • 다시 한번 married 규칙이 적용되어 규칙의 몸을 계산 – (married Mickey ?who)
  • 37. not (and (supervisor ?x ?y) (not (job ?x (computer programmer)))) (and (not (job ?x (computer programmer))) (supervisor ?x ?y)) • 같은 결과를 내지 않는다. – 입력은 빈 일람표 – 빈 일람표에서 컴퓨터 프로그램을 걸러내면 결과로 빈 일람표를 내놓는다.
  • 38. not의 차이 • 수학 논리의 not P – P가 참이 아니다 • 쿼리 언어의 not P – DB에서 P를 이끌어 내지 못한다. • 쿼리 언어의 not은 닫힌 세계 가정(closed world assuption) – DB에 관련 정보가 모두 들어 있다는 사실을 바탕으로 핚다.