知識ベースは、知識の蓄積、共有、探索、獲得、推論を体系的活効率的に実現するための基本的な枠組みを与えることを目的としたシステム
推論の例として3段論法がある。これはAならばB、BならばC→AならばCというものだ。
分野は もの(所有物)を介したコミュニケーション
名前は「スガパクホンダナ」言い、ER図は以下である。
以下は今回使うデータベースを表したものだ。
;;;知識ベース論課題
;;;2002/11/08提出
;;;スガパク知識ベース
;;;70060330 t00274yw Yusuke Wada
(load "rdb_ops.lsp")
;;;B.(1)
(defun Jacket() '((hon_name pic setumei)
(morning morning.jpg 2nd_album_of_oasis)
(inmyplace inmy.jpg 2nd_album_of_coldplay)
(themusic themusic.jpg 1st_album_of_themusic)
(richard richard.jpg 1st_albmu_of_richard)
(spiderman spiderman.jpg dvd_of_spiderman)
(pingpong pingpong.jpg dvd_of_pingpong)
))
(defun Hondana() '((motinushi ID)
(yusuke 1)
(kc 2)
(sugano 3)
(sugano 4)
(takao 5)
(yusuke 6)
(shunp 7)
(kc 8)
(yusuke 9)
(hatayan 10)
))
(defun Hon() '((ID path hon_name)
(1 morning.mp3 morning)
(2 morningglo.mp3 morning)
(3 morning.mp3 morning)
(4 pong.mpeg pingpong)
(5 pong.avi pingpong)
(6 pong.mpeg pingpong)
(7 pong.mpeg pingpong)
(8 inmy.mp3 inmyplace)
(9 in.mp3 inmyplace)
(10 themusic.mp3 themusic)
))
(defun Motinushi_data() '((ID kanso whoFrom whoTo)
(1 4 kc sugano)
(2 3 null yusuke)
(3 5 yusuke null)
(4 4 null takao)
(5 2 sugano yusuke)
(6 1 takao shunp)
(7 4 yusuke null)
(8 5 yusuke null)
(9 5 null kc)
(10 1 null null)
))
;;;B.(2)
;;;その1
;;;yusukeが持っているホンを全て表示する
(projection (join (selection (Hondana) 'motinushi 'yusuke 'eq) 'ID (Hon) 'ID #'=) '(hon_name))
;;;以下実行結果
;;selection: 10
;;join-start
;;join-sub: 10
;;join-sub: 10
;;join-sub: 10
;;join-end
;;projection: 3
;;((hon_name) (morning) (pingpong) (inmyplace))
;;;B(3)
;;;同じ結果が返るが、先にjoinをするので負荷が高い
;;;joinへ渡すタプルをなるべく少なめにすることを考慮すると負荷を少なくすることができる
(projection (selection (join (Hondana) 'ID (Hon) 'ID #'=) 'motinushi 'yusuke 'eq) '(hon_name))
;;;実行結果
;;join-start
;;join-sub: 10
;;join-sub: 10
;;join-sub: 10
;;join-sub: 10
;;join-sub: 10
;;join-sub: 10
;;join-sub: 10
;;join-sub: 10
;;join-sub: 10
;;join-sub: 10
;;join-end
;;selection: 10
;;projection: 3
;;((hon_name) (morning) (pingpong) (inmyplace))
;;;その2
;;;IDが9のジャケット写真を見る
(projection (join (selection (Hon) 'ID '9 'eq) 'hon_name (Jacket) 'hon_name 'eq) '(pic))
;;;実行結果
;;selection: 10
;;join-start
;;join-sub: 6
;;join-end
;;projection: 1
;;((pic) (inmy.jpg))
;;;その3
;;;感想が5のホンの名前を見る
(projection (join (selection (Motinushi_data) 'kanso 5 #'=) 'ID (Hon) 'ID 'eq) '(hon_name))
;;;実行結果
;;selection: 10
;;join-start
;;join-sub: 10
;;join-sub: 10
;;join-sub: 10
;;join-end
;;projection: 3
;;((hon_name) (morning) (inmyplace) (inmyplace))
;;;;;;B.(4)
;;;外部ビューを実装
;;;名前を与えてその人が持っているホンを表示する
(defun getHon(who)
(projection (join (selection (Hondana) 'motinushi who 'eq) 'ID (Hon) 'ID #'=) '(hon_name))
)
;;;実行結果
;;(getHon 'kc)
;;selection: 10
;;join-start
;;join-sub: 10
;;join-sub: 10
;;join-end
;;projection: 2
;;((hon_name) (morning) (inmyplace))