だから私は取り組んできたエクササイズに行き詰まっています。私は次の事実を持っています:
sd(appleseed0, appleseed1).
sd(appleseed0, apple1).
sd(appleseed1, apple1).
sd(appleseed2, apple1).
sd(appleseed0, apple2).
sd(appleseed1, apple2).
sd(appleseed2, apple2).
これが意味することは、appleseed1 が appleseed0 から来た、apple1 が appleseed0 から来たなどということです。私が抱えている問題は、値が入れ替わった場合に false を出力する必要があることです。つまり、クエリの結果が「true」の場合は「true」になり、クエリseed(appleseed0, apple1)
が逆の順序の場合は「false」になりますseed(apple1, appleseed0).
現在、私の述語は次のようになっています。
seed(A,B) :- sd(A,B) ; sd(B,A).
これが、順序に関係なくクエリが true を返す理由であることを理解していますが、他の唯一のアイデアは次のとおりです。
seed(A,B) :- sd(A,B).
しかし、そのように書くと、false のない無限ループになってしまうため、そのように書くことはできません。seed(appleseed2, apple2)
のようなもので表示されたときにクエリが「true」になり、のようなもので表示されたときに「false」になるようにするにはどうすればよいseed(apple2, appleseed2)
ですか?