Prolog のプログラムは Ideone または、Rextester、 Try SWI-Prolog online を利用して実行せよ。
注意: 一般的な Prolog の対話的な処理系では、「;」を入力すると、 別解を探索するが、Ideone 上では対話的な処理系は提供されていない。 そのため、Ideone で Prolog のプログラムを実行するときは、最後に
program :- findall(変数, ゴール, Bag), print(Bag).
のような一行を追加してすべての別解を表示させる必要がある。 ここで変数は、結果を見たい変数(例: X) または変数の組(例: (X,Y,Z))で、ゴールは実行したい Prolog への質問(ゴール)の式である。 例えば、program :- findall((X,Y), append(X, Y, [1,2,3]), Bag), print(Bag). とすると、 質問 append(X, Y, [1,2,3]). のすべての解の X と Y の組を表示する。
以下の徳川将軍家の家系図のプログラムについて、以下の問に答えよ。
予備: Rextester
他の親子関係(child(… …))で知っているものがあれば追加せよ。 あるいは徳川家以外の有名な一族の家系図を追加せよ。
⚠ 兄弟の関係を表す述語 brother(X,Y)「X と Y は兄弟である。」を定義せよ。
⚠ 甥(姪)の関係を表す述語 nephew(X,Y)「X は Y の甥(姪)である。」を定義せよ。
以下の append(リストの連接)のプログラムについて、以下の問に答えよ。
予備: Rextester
[1,2,3] を [1,2,3,4,5] (あるいは他のリスト)にかえて試してみよ。
以下のプログラムについて、以下の問に答えよ。
予備: Rextester
findall((X,Y), delete([1,2,3,4], X, Y), Bag), print(Bag).を質問するとその結果はどうなるか? まず予想し、実行して確かめよ。
findall(X, permutation(X, [1,2,3,4]), Bag), print(Bag).を質問するとその結果はどうなるか? まず予想し、実行して確かめよ。