今日はクリスマス。キリストの誕生日。つれづれなるままなのでキリスト教の『聖書』でも読んでみようと思った。
新約聖書の『マタイによる福音書』を開き、第1章から読みはじめる。家系図の組み立てキットみたいな文章からはじまってハードル高い。第1章には、イエス・キリストの誕生の次第が書いてあるようだ。
ただ読んだだけでは頭に残らず流れていくだけで読んだ気がしない。Graphvizを使って図にしてみた。分かりにくい図ができてしまったが、作ってしまったので、せっかくだから見せたい。
普通に手で家系図を書いた方が読みやすいのが描けたと思う。この家系図は少し蛇
蛇
のようだ。これが私のクリスマスの成果。
上の図はGraphvizをそのまま書くのではなくDonuts(Graphviz をcommon lispで書けるツール)を使った。family-treeという名前の関数に『マタイによる福音書』第1章の内容を写経した。
(defun family-tree ()
($$ (& (:layout :dot)
(-> "アブラハム" "ダビデ" :label "子")
(-> "イサク" "アブラハム" :label "父")
(-> "ヤコブ" "イサク" :label "父")
(-> "ユダ" "ヤコブ" :label "父")
(-> "パレス" "ユダ" :label "父")
(-> "ザラ" "ユダ" :label "父")
(-> "パレス" "タマル" :label "母")
(-> "ザラ" "タマル" :label "母")
(-> "エスロン" "パレス" :label "父")
(-> "アラム" "エスロン" :label "父")
(-> "アミナダブ" "アラム" :label "父")
(-> "ナアソン" "アミナダブ" :label "父")
(-> "サルモン" "ナアソン" :label "父")
(-> "ボアズ" "サルモン" :label "父")
(-> "ボアズ" "ラハブ" :label "母")
(-> "オベデ" "ボアズ" :label "父")
(-> "オベデ" "ルツ" :label "母")
(-> "エッサイ" "オベデ" :label "父")
(-> "ダビデ王" "エッサイ" :label "父")
(-> "ソロモン" "ダビデ王" :label "父")
(-> "ソロモン" "ウリヤ" :label "母")
(-> "レハベアム" "ソロモン" :label "父")
(-> "アビヤ" "レハベアム" :label "父")
(-> "アサ" "アビヤ" :label "父")
(-> "ヨサパテ" "アサ" :label "父")
(-> "ヨラム" "ヨサパテ" :label "父")
(-> "ウジヤ" "ヨラム" :label "父")
(-> "ヨタム" "ウジヤ" :label "父")
(-> "アハズ" "ヨタム" :label "父")
(-> "ヒゼキヤ" "アハズ" :label "父")
(-> "マナセ" "ヒゼキヤ" :label "父")
(-> "アモン" "マナセ" :label "父")
(-> "ヨシヤ" "アモン" :label "父")
(-> "エコニヤ" "ヨシヤ" :label "父")
(-> "サラテル" "エコニヤ" :label "父")
(-> "ゾロバベル" "サラテル" :label "父")
(-> "アビウデ" "ゾロバベル" :label "父")
(-> "エリヤキム" "アビウデ" :label "父")
(-> "アゾル" "エリヤキム" :label "父")
(-> "サドク" "アゾル" :label "父")
(-> "アキム" "サドク" :label "父")
(-> "エリウデ" "アキム" :label "父")
(-> "エレアザル" "エリウデ" :label "父")
(-> "マタン" "エレアザル" :label "父")
(-> "ヤコブ" "マタン" :label "父")
(-> "ヨセフ" "ヤコブ" :label "父")
(-> "マリヤ" "ヨセフ" :label "夫")
(-> "マリヤ" (<> "イエス・キリスト" :color :red) :label "子"))))
REPLで使う。
CL-USER> (ql:quickload :donuts)
CL-USER> (in-package :donuts)
DONUTS> (family-tree)
関数family-treeの2行めの(:layout :dot)の部分の:dotを:neatoとか:fdpとか:sfdpとか:twopiとか:circoとかに書き換えるとレイアウトを変更できる。
(:layout :fdp)
(:layout :neato)