SCBM-Prolog 猫 収容成功 太陽系脱出へ向かう
ノービッグ先生のPAIPの例題を題材にしてSCBM-Prologの
新方式のデバッグをしています。
likes(kim,robin).
likes(sandy,lee).
likes(sandy,kim).
likes(robin,cats).
likes(sandy,X) :- likes(X,cats).
likes(kim,X) :- likes(X,lee),likes(X,kim).
likes(X,X).
SCBM-Prolog ver1.11でこれが動作するようになりました。
修正箇所
完全失敗にともなうバックトラックの処理を修正しました。
likes/2の第5節のところが問題でした。本体部のlikesは再帰により証明列において置換されます。
likes(cats,cats)の成功によりX=sandyが求まった後が問題でした。
そのあとで失敗してもとのlikes/2に復元して再試行しないといけないのでした。
この復元をすることにより残りのX=cat X=sandy も求まるようになりました。
ver1.11リリース
この状態でver1.11をリリースしています。これを基礎にしてより複雑な例題をこなせるように改良を進めます。ドキュメントのSCBM.mdにAPIの仕様、考え方を記述してあります。
ご興味ありましたらご覧下さい。
太陽系脱出へ
証明列によるコンパイルコードの方法は部分的に正しいことがわかりました。
まだまだバグは残っておりこれから改良をしていかないといけませんが、まずはアイディアの方向性は正しいことが見えてきました。今回のバージョンで無事、猫を捕獲収容しました。
これより宇宙船ヤマトは太陽系脱出へむけて舵を切ります。当面は不完全動作のfact/2への対応です。
地球帰還まであと11か月
