swiftで三段論法

swift playgrouds での3番目のプログラミング。今回は、三段論法を使用する人工知能っぽい何か。

../../../_images/theSandbox04.png

機械に推論させるのは、難しいと思われるかもしれない。三段論法くらいであれば、結構単純なアルゴリズムで推論が実行できる。

大雑把な解説

プログラムは、structが一つ、メソッドは6つ、プロパティが1つ、の単純な構成です。

大きく分けて、2つの部分からなっています。

  • 三段論法を実行する部分
    • プロパティ: “知識集” 三段論法で使用する事実を保持します
    • メソッド : “デバッグ表示” デバッグ用に “知識集” の内容を出力します。
    • メソッド : “登録” 知識の登録をします。
    • メソッド : “検索” 引数で与えられた単語の知識を検索します。
    • メソッド : “推論” 引数2つで与えられた知識の真偽を推論します。
  • 自然言語の解析部分
    • メソッド : “分ち書き” 文字列を単語に分けます。
    • メソッド : “入力” 与えられた文字列の内容に従って、知識の登録、知識の真偽を判定します。

データ構造も非常にシンプルです。

var 知識集: [(lhs: String, rhs: String)] = []

タプルの配列です。「lhsはrhsである」との形式で知識を溜め込みます。

例えば、「ソクラテスは人間です」は、タプルとして

(lhs: "ソクラテス", rhs: "人間")

とタプルの形式にして、プロパティ “知識集” に蓄積されてゆきます。

参考文献とソースコード

プロジェクトファイル

  •  Logo 人工知能へのアプローチ
    https://www.amazon.co.jp/Logo-人工知能へのアプローチ-ラジオ技術選書-150-祐安-重夫/dp/4844301500