-> d % + - - - - ^ path(a, b). path(b, c). path(c, d). path(a, c). % パスを辿って接続しているかの定義 connected(X, Y) :- path(X, Y). connected(X, Y) :- path(X, Z), connected(Z, Y). % a から接続しているノードを探索(fail で強制バックトラックして全列挙) ?- connected(a, X), write(X), write(' '), fail. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 > /code-like-prompt:07-b-multi-clause ⏺ b c d c d 1 2 3 👍 55